观察绑定属性的子项的更改

时间:2016-01-26 10:24:27

标签: c# wpf mvvm

我有一个看起来很像这样的数据对象:

public class ItemSetting
{
    public string Description { get; set; }
    public string Setting { get; set; }
}

我的一个ViewModel在名为ItemSettings的属性中有一个ObservableCollection这样的对象,它绑定到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>

这很好用。列表显示,在添加或删除项目时更新,如果用户更改了描述或设置值,它们会反映在基础对象中,并可在用户按下&#34;保存&时发送回数据库#34;按钮。

列表通常非常大,用户要求我添加一项功能,告诉他们列表中是否有未保存的更改,以减少丢失工作的风险。在应用程序的其他地方,我们通过基本ViewModel中的UnsavedChanges布尔属性来完成此操作,我们可以在关闭之前检查它并且工作正常。

麻烦的是,我不知道如何在用户输入设置或描述框中以便设置布尔值。 ItemSettings暴露了一个ObservableCollection,当然,我可以通过属性的set部分来检测它的变化。但是当孩子的价值观发生变化时,这并不会绊倒。

有没有办法可以在不将描述和设置到单个属性并在那里使用设置值的情况下执行此操作?

1 个答案:

答案 0 :(得分:1)

类ItemSetting应该实现INotifyPropertyChanged接口以检测更改,

public class ItemSetting : ViewModelBase
{
    public string Description 
     get { return _description; } 
     set { _description = value; 
         this.RaisePropertyChanged("Description");
         }       
}