我有ListView
设置了不同的DataTemplate
绑定。我想在bindingexpression上调用UpdateSource()
时更新一些列(文本块和进度条的混合)。我还想在更改属性时更新其中的一列。
我能够让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();
我错过了什么吗?我无法在网上找到任何关于为什么会这样做的书。
干杯
答案 0 :(得分:1)
我认为你混淆了源和目标......源是你的_ downloads
集合,目标是GridViewColumn
。 UpdateSourceTrigger
属性控制控件何时更新源,但我认为您的网格不可编辑,因此您无需使用此属性。
目标的更新始终是立即的,没有UpdateTargetTrigger
属性...