监视绑定属性的子属性的变化

本文关键字:属性 变化 绑定 监视 | 更新日期: 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");
         }       
}