2012-03-22 12 views
0

私は現在、次のようにXAMLコードを持っている:IsAsyncバインディングがビジー状態の間、砂時計が必要です。可能?

<ListView Name="fileLV" SelectionMode="Extended" ItemsSource="{Binding path=DataContext.SelectedAsset.Files,ElementName=selectionView,IsAsync=True}"/> 

その「ファイル」プロパティが返すために15秒かかります。ユーザーが何が起こっているのか不思議です。フォールバック値を表示するか、複数のバインディングを使用するためのコードをいくつか見てきましたが、これらのコントロールには砂時計のように「このコントロールを単独で置いてください」とは関係ありません。

私が望むのは、名前をバインディングして、そのバインディングのIsBusyプロパティに他のプロパティをバインドすることです。私は彼のバインディングがビジーである間、そのリストビュー上のカーソルを変更するトリガーが必要です。既存のWPFフレームワークのヘルプがありますか?

+0

をBackGroundWorkerを終了しますか?データがロードされている間、コントロールを無効にすることができます。 ProcessChangedは、1時間のガラスよりも有益です。%完全または数のファイルで更新できます。優先度バインドでは、実際のステータスメッセージを無効にしたり表示したりすることはできません。 – Paparazzi

答えて

0

私はDataTemplateSelectorを機能させることができました。 1つの注意点は、ListViewのすべてのバインディングが列挙可能である必要があるということでした。私のコントロールでは私はこのようなリソースを追加しました:

<UserControl.Resources> 
    <x:Array x:Key="LoadingTemplate" Type="DataTemplate"> 
    <DataTemplate>...my daisy code...</DataTemplate></x:Array>... 

それから私は私がこのように見えるように結合変更:

    <ListView.ItemsSource> 
         <PriorityBinding> 
          <Binding Path="DataContext.SelectedAsset.Files" ElementName="selectionView" IsAsync="True"/> 
          <Binding Source="{StaticResource LoadingTemplate}" /> 
         </PriorityBinding> 
        </ListView.ItemsSource> 

そこで私は、このテンプレートセレクタインストール:あなたはなぜ

public class OverridableDataTemplateSelector: DataTemplateSelector 
    { 
     public override DataTemplate SelectTemplate(object item, DependencyObject container) 
     { 
      return item as DataTemplate ?? base.SelectTemplate(item, container); 
     } 
    } 
0

Iは、内蔵任意のを知らない、アウト・オブ・ボックスソリューションが、必ずそれから素敵な経験をする方法があります。 私はあなたに私はこれを建設すると、あなたが必要な場合、私は、同様のコードを思い付くことができる方法を簡単にアイデアを与えるだろう。

  1. はいくつかの種類のプログレスバーが表示されるでしょう「LoadingItem」のDataTemplateを作成します。あなたのリストのアイテムとして

  2. LoadingItem とあなたのリストのRegularItemを切り替えるための "DataTemplateSelector"を作成します。コレクションをクリアし がLoadingItemとして表示されることを項目を追加

    あなたのファイルのプロパティで
  3. 、(あなたは DataTemplateSelectorロジックを構築しました方法によって異なります。ファイル をスキャンするために別のスレッドを起動して、中に結果のリターンを埋めます一時的なコレクション (BackgroundWorkerの)。メソッドの戻り、再度UI スレッド上にある、あなたのItemsSourceコレクションは再びクリアし、結果を それを埋める。このため
+0

私は少しこのソリューションを検討しました。私はそれといくつかの葛藤があります。最初に、私は強いタイプのファイルの戻り値が好きです。実際にはかなりの場所で使用されています。私は各ユーザがリターンのデータ型を分析する必要はありません。しかし、私はこの作品のようなものをPriorityBindingで作ることができるようです。私はそれがDataTemplateの場合、セレクタが返す項目があると思っています。そのテンプレートを静的リソースとして定義し、それを第2の優先度としてバインドします。 – Brannon

0

財産に。のisAsyncを使用していませんBackGroundWorkerを使用します。最初に「作業メッセージ」を含むソースを返し、Baを開始しますckGroundWorkerを呼び出し、コールバックで実際のソースを提供し、NotifyPropertyChangedを呼び出します。あなたはプロジェクトバーを持つことさえできます。

関連する問題