监视绑定属性的子属性的变化
本文关键字:属性 变化 绑定 监视 | 更新日期: 2023-09-27 18:31:50
我有一个数据对象,看起来很像这样:
public class ItemSetting
{
public string Description { get; set; }
public string Setting { get; set; }
}
我的一个 ViewModels 在一个名为 ItemSettings 的属性中具有此类对象的可观察集合,它绑定到 ListView,如下所示:
<ListView ItemsSource="{Binding ItemSettings, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}">
<ListView.View>
<GridView>
<GridViewColumn Header="Description">
<GridViewColumn.CellTemplate>
<DataTemplate>
<TextBox Text="{Binding Description}" />
</DataTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>
<GridViewColumn Header="Setting">
<GridViewColumn.CellTemplate>
<DataTemplate>
<TextBox Text="{Binding Setting}" />
</DataTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>
</GridView>
</ListView.View>
</ListView>
这工作正常。列表显示,在添加或删除项目时更新,如果用户对"描述"或"设置"值进行更改,它们将反映在基础对象中,并且可以在用户按下"保存"按钮时发送回数据库。
该列表通常非常大,用户要求我添加一个功能,以告诉他们列表中是否有未保存的更改,以降低丢失工作的风险。在应用程序的其他地方,我们通过基本 ViewModel 中的 UnsavedChanges 布尔属性完成了此操作,我们可以在关闭之前检查该属性并且工作正常。
问题是我不知道如何获取用户在"设置"或"说明"框中键入以设置布尔值的事件。ItemSettings 公开了一个 ObservableCollection,当然,我可以通过属性的 set 部分来检测它何时更改。但是,当子值发生变化时,这不会跳闸。
有没有办法在不将"描述"和"设置"拉入单个属性并在那里使用设置值的情况下做到这一点?
类 ItemSetting 应该实现 INotifyPropertyChanged 接口以检测更改,
public class ItemSetting : ViewModelBase
{
public string Description
get { return _description; }
set { _description = value;
this.RaisePropertyChanged("Description");
}
}