2013-12-20 236 views
3

我對WPF很陌生。我試圖綁定到DataGrid行中的一個屬性,以便當該行被單擊屬性設置。綁定到DataGrid的ItemsSource是Field類型的ObservableCollection對象。WPF:綁定到DataGrid中的SelectedItem行

我試圖綁定到DataGrid上的SelectedItem屬性,但該屬性沒有被調用。我使用幾乎相同的代碼綁定到一個ComboBox的SelectedItem,這工作正常。有沒有我不知道的差異?

<ComboBox ItemsSource="{Binding RecordTypes}" SelectedItem="{Binding SelectedRecordType}" ... 
<DataGrid ItemsSource="{Binding Fields}" SelectedItem="{Binding SelectedField}" ... 

在我的ViewModel:

private Field SelectedField 
{ 
    get 
    { 
     return _selectedField; 
    } 
    set 
    { 
     _selectedField = value; 
    } 
} 

(我將使用自動屬性後,它只是當前設置像這樣這樣,當屬性設置我能打破)。

我不確定它是否有所作爲,但DataGrid由2個DataGridTextColumns和一個DataGridTemplateColumn組成,其中包含一個複選框。

有沒有人有任何想法?我非常感謝任何建議。

爲了確認,我想聽一下行的點擊的原因是,只要點擊一行就可以選中複選框。如果有更好的解決方案,請讓我知道。

+1

我從來沒有綁定過一個標記爲private的屬性,我相信它必須是一個公共屬性才能綁定到UI。你的ObservableCollection也被用作Field類型的對象的ItemsSource? –

+0

我想你還需要設置列綁定。 – dburner

+0

請檢查您的輸出窗口是否有任何綁定錯誤。我不確定,但是您需要爲您的財產實施INotifyPropertyChanged。 – Khushi

回答

1

你需要使它成爲一個雙向綁定:

SelectedItem="{Binding SelectedField,Mode=TwoWay}" 

中傳播變化的視圖(用戶選擇一個項目,SelectedItem變化)回視圖模型(「SelectedField」屬性)。

此外,作爲@KevinDiTraglia指出的那樣,你需要確保該視圖模型屬性SelectedField公共,而不是私人的,否則綁定將無法訪問的getter/setter。

+0

你可以告訴我在凌晨2點嘗試這個,好像我標記了我的私人財產!難怪它不起作用!無論如何感謝您的回覆。 – user3124134