我有一個WPF MultiSelectTreeView(從這裏下載:http://unclassified.software/en/source/multiselecttreeview)。如何控制從MultiSelectTreeView ViewModel的選擇
現在我想控制,用戶選擇哪些項目。一個簡單的例子是他不應該能夠選擇不同父母的孩子節點。但是也有更多的ViewModel特定用例。
通過使用PreviewSelectionChanged事件,直接檢查條件並相應地設置Cancel-flag,很容易在Window的代碼隱藏中實現此功能。但因爲我想獲得視圖和ViewModel的分離,我正在尋找一種在我的WindowViewModel中做到這一點的方法。
當然,你也可以提取支票視圖模型和視圖調用它,但它看起來錯誤:
WindowViewModel _viewModel;
void PreviewSelectionChanged(object sender, PreviewSelectionChangedEventArgs e)
{
e.Cancel = !this._viewModel.CanSelect(e.Item as TreeItemViewModel);
}
我希望任何人有一個想法。
- timnot90
視圖/邏輯的分離並不意味着視圖類中沒有代碼。通過使用PreviewSelectionChanged,您不會失去ViewModel的可測試性,所以在我看來這很好。 – metacircle 2015-02-23 09:01:05
通常,您的數據項應具有數據綁定到「TreeViewItem.IsSelected」屬性的「IsSelected」屬性。然後,您可以將其設置爲「true」以選擇一個項目,並將其設置爲「false」以取消選擇一個項目。 – Sheridan 2015-02-23 09:06:18
@Sheridan 是的,他們有。但我不知道何時設置此屬性。如果我在代碼背後做,我也可以按照我的問題描述。 因爲它似乎是好的,我想我會的。我只是認爲在mvvm中有這樣一種奇特的方式。 感謝您的幫助。 還有一件事:我可以做些什麼來標記這個問題,回答沒有「真實」的答案? – timnot90 2015-02-23 09:49:28