2014-04-22 189 views
0

我已經綁定了ObservableCollection到ItemSource到DataGrid,但是,我想通過ViewModel檢索(通過setter)單個屬性。WPF綁定屬性到Datagrid

好聽起來令人困惑,所以會解釋。在我的ObservableCollection中,我有一個名爲「Active」的屬性,所以我想在用戶點擊或關閉DataGrid中的複選框時設置該元素。

所以XAML

<DataGridTemplateColumn.CellTemplate> 
    <DataTemplate> 
     <CheckBox IsChecked="{Binding Active, Mode=TwoWay}" HorizontalAlignment="Center"></CheckBox> 
    </DataTemplate> 
</DataGridTemplateColumn.CellTemplate> 

而且我想,當沒有選中該複選框這觸發視圖模型的代碼或檢查

private bool m_Active = false; 

public bool Active 
{ 
    get { return m_Active; } 
    set 
    { 
     m_Active = value; 

     OnPropertyChanged("Active"); 
    } 
} 

但即使雙向模式上,這不是」噸。任何原因爲什麼?

注意:在DataGrid的SelectedItem屬性中,我可以得到SelectedRow,所以基本上我想要選擇Individual屬性!

感謝

+0

datacontext是不同的。複選框的datacontext將是行項目,但您的屬性在您的視圖模型中。 – Shoe

+0

我明白,這意味着我只能從設置DataContext的行項目中獲取單個屬性? – user3428422

回答

0

這聽起來像你混淆了在數據網格中尋找「活躍」屬性。由於datagrid綁定到Observable集合,因此observable集合中的對象需要具有「Active」屬性,而不是用於視圖的視圖模型。但是,如果實際上想要將數據網格的所有行綁定到視圖模型上的單個屬性,則需要查找祖先樹來查找控件的數據上下文,然後綁定到「活動」屬性:

<CheckBox IsChecked="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type UserControl}}, Path=DataContext.Active, Mode=TwoWay}" HorizontalAlignment="Center"></CheckBox> 

但是,我想,你正在尋找綁定到可觀察集合中對象的'Active'屬性。在運行應用程序時檢查輸出窗口,如果該對象上不存在該屬性,則應該看到綁定錯誤。

+0

嗨喬希,主動財產是Observable集合的財產。我只需要做一些用戶是否想要檢查它的邏輯。所以我的理解是,selectedItem將從Observable集合中選擇一行,其中包含所有的屬性。這是偉大的,但我現在只需要知道,如果用戶正在檢查活動的屬性或不 – user3428422

0

嘗試使用CellEditingTemplate

<DataGridTemplateColumn.CellEditingTemplate> 
       <DataTemplate> 
        <CheckBox IsChecked="{Binding Active, Mode=TwoWay}" HorizontalAlignment="Center"></CheckBox> 
       </DataTemplate> 
      </DataGridTemplateColumn.CellEditingTemplate> 

希望幫助

0

你試過設置UpdateSourceTrigger?

<CheckBox IsChecked="{Binding Active, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" HorizontalAlignment="Center"></CheckBox> 
+0

我有,謝謝,但我想我需要使用relativeSource綁定 – user3428422