2017-06-21 2 views
0

getが時間のかかる方法を使用するビューモデル内のプロパティに非同期にバインドされたwpfのTextBlockを考えてみます。 xamlコードのFallbackタグを使用して、TextBlockTextタグを「読み込み中...」に設定できます。読み込み時にwpf controllerの代わりに "loading" gifを表示するには?

しかし、IEnumerable<MyType>にバインドされているListBoxがあります。リストボックスの項目には、MyTypeという異なるフィールドが表示されています。バインドされたIEnumerable<MyType>がロードされている間に、どのようにlapping gif(またはwpf要素の種類)を表示させることができますか?

Loading要素のVisibilityを非同期プロパティの状態を表す何らかの種類のboolにバインドすることはできますが、xamlではこのようなboolが見つかりません。 xamlに存在しない場合は、ロードメソッドの状態を調べて、このboolをviewmodelに作成することができます。それはそれを達成するための最良の方法でしょうか?

答えて

1

あなたは非同期MVVMアプリケーションのためのパターンに関する@Stephenクリアリーさんの記事読んでください:https://msdn.microsoft.com/en-us/magazine/dn605875.aspxを。

あなたはNotifyTaskCompletion<IEnumerable<MyType>>ソースプロパティにバインドして表示するDataTriggerまたはIsNotCompleted財産への単純な結合を使用することができますImageResultプロパティが設定されるまで:

<!-- Busy indicator --> 
<Image Source="pic.png" Visibility="{Binding YourItemsSourceProperty.IsNotCompleted, 
      Converter={StaticResource BooleanToVisibilityConverter}}"/> 
<!-- Results --> 
<ItemsControl ItemsSource="{Binding YourItemsSourceProperty.Result}" Visibility="{Binding 
      UrlByteCount.IsSuccessfullyCompleted, Converter={StaticResource BooleanToVisibilityConverter}}"/> 

詳細については記事を読んでくださいやりたいことややらないことについて。

+1

リンクmm8のおかげで、記事は非常に興味深いです。私はそれを解決するために自分自身にインスピレーションを与えました。 –

1

ItemsSourceの状態に応じて、変更される可能性がControlTemplate

<ListBox ItemsSource="{Binding Items}"> 
    <ListBox.Style> 
     <Style TargetType="ListBox"> 
      <Style.Triggers> 
       <Trigger Property="ItemsSource" Value="{x:Null}"> 
        <Setter Property="Template"> 
         <Setter.Value> 
          <ControlTemplate TargetType="ListBox"> 
           <Image Source="LoadingImage.png"/> 
          </ControlTemplate> 
         </Setter.Value> 
        </Setter> 
       </Trigger> 
      </Style.Triggers> 
     </Style> 
    </ListBox.Style> 
</ListBox> 
+0

この回答grek40に感謝します。 'Value =" {x:Null} "'は、boundedプロパティの "まだロードされていない"機能を制御するタグですか? –

+0

はい、この例では、 'ItemsSource'がロードされるまで' null'と仮定します。しかし、 'DataTrigger'と' Converter'でいつも同じ主要なアプローチを使用して、任意の複雑な決定メカニズムをサポートしたり、viewmodelから 'ItemsLoaded'のようないくつかの異なるプロパティを決定することができます。 – grek40

関連する問題