我有一个模特
private List<POStatusModel> _postatuslist;
public List<POStatusModel> PoStatusList
{
set
{
_postatuslist = value;
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs("PoStatusList"));
}
get { return _postatuslist; }
}
public class POStatusModel
{
public int pocount { set; get; }
public string postatus { set; get; }
public DateTime timestamp { set; get; }
public System.Windows.Media.Brush brushColor { set; get; }
public POStatusModel()
{ }
}
哪个绑定到项目控件
<ItemsControl Name="PoStatusItemsControl" Grid.Row="1" Margin="10,2,2,0" ItemsSource="{Binding PoStatus.PoStatusList}">
<ItemsControl.ItemTemplate>
<DataTemplate>
<TextBlock Foreground="{Binding brushColor}">
<Run Text="{Binding pocount}"></Run>
<Run Text="-"></Run>
<Run Text="{Binding postatus}"></Run>
</TextBlock>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
有时候列表会刷新,可能会出现不同的数据。但它没有改变。即使调用被提升了。
这是我在视图模型中更新列表的方式
public MetricPoStatusModel PoStatus { get; set; }
并在计时器下执行此操作
PoStatus = new MetricPoStatusModel(Connection);
我是否应该对PoStatus模型类下的元素进行propertychanged调用?
谢谢。
答案 0 :(得分:2)
WPF感觉由INotifyPropertyChanged和IObservableCollection改变, 因此,您可以在任何需要的位置检测实现这些接口所需的更改。 例如,如果要向PoStatusList添加项目,则需要使用ObservableCollection,如果按新列表设置列表(PoStatusList),则需要调用NotifyPropertyChanged。
答案 1 :(得分:1)
我没有深入细节,但使用基本的buzwords,你应该能够在谷歌上找到大量的资源。
答案 2 :(得分:1)
应该使用ObservableCollection而不是列表;除非列表是静态的。
使用ObservableCollection不需要使用INotifyPropertyChanged。
创建后,不应将ObservableCollection重新分配给新列表,即如果要重新填充它,请使用Clear()然后添加条目