2009-08-15 4 views
0

私はListViewに別のDataTemplateがバインドされています。私はバインディング表現でUpdateSource()を呼び出すと、いくつかの列(テキストブロックとプログレスバーの組み合わせ)を更新したいと思います。私はまた、それがバインドされているプロパティが変更されたときに、列の1つを更新したい。WPF ListView UpdateSourceTriggerをバインドして明示的に奇妙な動作に設定しました

私はPropertyChangedの動作を動作させることができました。しかし、私が他の列のプロパティを変更するたびに、UpdateSourceコールではなく、まっすぐに更新されます。 xamlに設定されているデフォルトの動作を使用しているUpdateSourceTriggerを無視しているようです。

私はINotifyPropertyChangedインターフェイスを実装するクラスを持っています。

私は明示的に更新したい列のXAMLは、次のようになります。

<GridViewColumn Width="300" Header="Percentage" DisplayMemberBinding="{Binding Percentage, UpdateSourceTrigger=Explicit}" /> 

そして、私はプロパティ変更で更新したいもののためのXAML:

<GridViewColumn Header="Status" Width="150" DisplayMemberBinding="{Binding Status, UpdateSourceTrigger=PropertyChanged}" /> 

私のバインディングが設定されていますもともとのように:

Binding downloadBinding = new Binding(); 

downloadBinding.Source = _downloads; 

ListDownloads.SetBinding(ListView.ItemsSourceProperty, downloadBinding); 

次のコードを実行すると:

_downloads[0].Percentage += 0.3; 
_downloads[0].FileSize = 700.00; 
_downloads[1].Percentage += 10; 

列のパーセンテージの列はすぐに更新されますが、UpdateSource()の呼び出しを待つことが期待されます。

ソースを更新するための私のコードは次のとおりです。

BindingExpression be = ListDownloads.GetBindingExpression(ListView.ItemsSourceProperty); 
be.UpdateSource(); 

私は何かが足りないのですか?私は何がオンラインであるか、なぜこれが起こっているかについての本で見つけることができません。

乾杯

答えて

1

私はソースは、ターゲットがGridViewColumnであるあなたの_ downloadsコレクションです...あなたは、ソースとターゲットを混乱していると思います。 UpdateSourceTriggerプロパティは、ソースがコントロールによって更新されたときにコントロールしますが、グリッドは編集できないと仮定しているため、このプロパティを使用する必要はありません。

ターゲットの更新は常に即時で、何UpdateTargetTriggerプロパティがありません...

+0

ので、リストビューを更新する唯一の方法は、再バインドまたはそれらの線に沿って何かすることですでしょうか? –

+0

オブジェクトがINotifyPropertyChangedを実装しているため、データが変更されたときにリストビューが更新されます。 –

関連する問題