那麼,我不會說這是「非常糟糕的形式」。我認爲沒關係。
爲了簡單起見,以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中定義它是非常合理的。
它似乎傳播我的綁定和事件邏輯跨多個領域(因爲我在外部XAML中使用主題,我必須把綁定在那裏)。根據我的風格,沒有其他字段,命令等的綁定必須結束。因此,從現在開始我可能正在尋找的幾個月似乎是個例外,而不是去顯而易見的地方。 – Mark 2010-09-02 12:42:02