2011-07-26 39 views
0

我需要在我的DataGrid中有一個帶有複選框的列,供用戶選擇各種行(稍後將執行操作)。網格ItemsSource綁定到一個ObservableCollection。我最快的解決方案(不是最好的,但只是爲了讓它工作)我認爲會從集合中的類繼承,添加一個IsSelected屬性,我可以綁定,並從那裏工作。但是,我開始使用的集合已經實例化,而向下轉換/逆轉不適用於我。而且,重新創建派生類的集合是不可行的。我如何添加一個「選擇」列到MVVM的Silverlight DataGrid

所以,我現在正在尋找一個簡單的解決方案,可能在複選框列上附加一個行爲。我不想在這上面花太多時間,所以我需要一些想法。

回答

0

我最終不得不做這種方式:

1)使用TemplateColumn中,而不是DataGridCheckBoxColumn內一個複選框,因爲DataGridCheckBoxColumn沒有已檢查& Unchechecked事件勾住。

2)在複選框上爲Checked和Unchecked事件創建一個行爲類,併爲每個事件分別命令;我必須創建一個行爲類,因爲雖然CheckBox已經有一個Command屬性,但似乎沒有任何方法可以確定控件的選中/未選中狀態,除非用作CommandParameter,我需要將該信息傳遞給DataGrid綁定項目。

3)從View中傳入VM的引用,並將VM聲明爲代碼後面的靜態資源;我必須這樣做,以便綁定到我的虛擬機中的命令與複選框,同時有權訪問相同的Observab

0

我認爲你正在做的是一個很好的方法來做到這一點。你使用的子類是原始類的「ViewModel」。

然而,有一個使用SelectedItems收集DataGrid控制,你不能綁定到直接,可惜的另一種方式,我在this post by Laurent Bugnion發現,因爲它不是一個DependencyProperty,但他使用從EventToCommand行爲他MVVMLight Toolkit並通過SelectedItems收集作爲CommandParameter

我希望這有助於;)

+0

這種方法的問題是,SelectedItems獨立於列「選擇器」獨立的工作方式。這就像我維護我自己的「SelectedItems」集合,無論在網格中選擇什麼。可以選擇一行,但複選框未選中。 – Random

+0

我想這也可以用類似行爲來實現,但我不習慣它們。 – AbdouMoumen

+0

絕對使用擴展DataGrid的更廣義的方法是要走的路,但我現在只需要擔心這一個實例,而不是猜測我需要將其擴展到其他地方纔有用。 – Random

相關問題