2016-01-26 100 views
0

我有一个数据对象的孩子看变化,看起来像这样很多:在绑定属性

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

一个我的ViewModels有这样的对象在一个名为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> 

而且这工作正常。列表显示,当项目被添加或删除时得到更新,并且如果用户对描述或设置值进行了更改,它们将反映在基础对象中,并且可以在用户按下“保存”按钮时将其发送回数据库。

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

问题是,我不知道如何在用户输入设置或说明框中输入事件来设置布尔值。 ItemSettings公开了一个ObservableCollection,我可以通过属性的set部分来检测何时该更改。但是,当儿童价值观发生变化时,这并不会发生。

有没有一种方法,我可以做到这一点,而不需要拉动描述和设置到单独的属性和使用设置值呢?

+0

马特,你有足够长的StackOverlfow知道,你不应该强制标签到你的问题标题按SO在http://stackoverflow.com/help/tagging上找到问题的指导原则“在标题中唯一使用标签的时候,是与标题的会话语气有机联系的。”这就是标签部分为 – Tseng

回答

1

类ItemSetting应实现INotifyPropertyChanged接口,以便检测的变化,

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

谢谢,但由于这是我的ViewModel外部,我不知道我怎么能用它来设置一个属性呢? –

+0

这个类可以用作ViewModel类。这将有助于查找可观察集合中每个对象的更改。 – Nantharupan