2010-08-31 67 views
2

我想要綁定我的ViewModel中的布爾型字段,以便在選擇datagrid中的行時將其設置爲true。Datagrid row IsSelected binding

所以我有這與風格技巧的工作。這是用我的主題:

然後在XAML標記爲DataGrid: ItemContainerStyle = 「{DynamicResource ItemSelection}」

但對我來說,這似乎形成非常差。我不希望在我的風格區域發生屬性綁定。有一個更好的方法嗎?如果沒有直接綁定到該行的IsSelected值的方法?

回答

0

那麼,我不會說這是「非常糟糕的形式」。我認爲沒關係。

爲了簡單起見,以ListBox爲例。如果你手動添加項目,你會得到類似這樣的結果:

<ListBox> 
    <ListBoxItem IsSelected="{Binding IsSelectedProperty}">Item1</ListBoxItem> 
    <ListBoxItem IsSelected="{Binding IsSelectedProperty}">Item2</ListBoxItem> 
    <ListBoxItem IsSelected="{Binding IsSelectedProperty}">Item3</ListBoxItem> 
</ListBox> 

這看起來「OK」吧?您直接從實際控件(即ListBoxItems)綁定到ViewModel中的屬性。這有點回答你的問題。這是綁定IsSelected屬性的另一種方式。您必須手動將項目添加到控件。我不確定你是如何在DataGrid中做到這一點的。

現在,如果你打算爲ListBox(或DataGrid)指定一個ItemsSource,那麼你有點告訴ListBox爲你自動生成ListBoxItems。並且由於您想將ListBoxItems的「IsSelected」屬性全部綁定到您的ViewModel,因此在Style中定義它是非常合理的。

+0

它似乎傳播我的綁定和事件邏輯跨多個領域(因爲我在外部XAML中使用主題,我必須把綁定在那裏)。根據我的風格,沒有其他字段,命令等的綁定必須結束。因此,從現在開始我可能正在尋找的幾個月似乎是個例外,而不是去顯而易見的地方。 – Mark 2010-09-02 12:42:02