我有一个理论问题。
<ListBox ItemSource= "{Binding Fruits}" >
<ListBox.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding Color}" />
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox
我们假设我的ViewModel中有ObservableCollection<Fruit> Fruits
。
水果不是我的课,所以当水果颜色改变时,我无法实现INotifyPropertyChanged。
我知道在我的ViewModel中更改了这些属性,例如:
public ChangeColor()
{
Fruits[1].Color = "Blue";
//Notify Fruits Here, How?
}
答案 0 :(得分:1)
public class FruitsEx : Fruits, INotifyPropertyChanged { public Color ColorEx { get { return this.Color; } set { this.Color = value;
if (PropertyChanged != null) { PropertyChanged(this, new PropertyChangedEventArgs("ColorEx")); } } } // INotifyPropertyChanged event public event PropertyChangedEventHandler PropertyChanged; public void NotifyPropertyChanged(string propertyName) { if (PropertyChanged != null) {
PropertyChanged(this, new PropertyChangedEventArgs(propertyName)); } } }
通过这种方式,您可以使用ColorEx属性来通知更改。
要记住的一件事是,如果你这样做
new ObservableCollection<T>()
目标不会更新。因为ObservableCollection本身并没有实现通知机制。
答案 1 :(得分:0)
正如Jehof在评论中提到的,这里的关键是创建一个FruitViewModel来包装你的水果模型。 在这种情况下,您需要告诉特定的FruitviewModel在其中一个属性上调用OnPropertyChanged才能工作。 (&#34; Fruits.Name&#34;)将无效。