2016-01-26 104 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