我不知道你是如何做這樣的事情的。假設,我們有修改樹的MVVM CRUD應用程序(例如,菜單結構)。我們有一個包含菜單項和兩個視圖的視圖模型:第一個爲TreeView
,第二個爲DataForm
。主要問題是:當選擇更改時,自動取消DataForm中的更改
DataForm
無法處理 分層數據。- 根據菜單項中選擇的
TreeView
的DataForm
應(菜單項 與兒童或不例如)顯示不同的一組 字段。
我已經結束了以下。視圖模型有3個領域:
Items
- 有他們自己的 收集Children
爲 構建分層數據源MenuItem
對象的集合。SelectedItem
- 當前選擇MenuItem
在TreeView
。- -
EditViewModel
對象基本上具有兩個 後代:MenuItemEditViewModel
和LeafMenuItemEditViewModel
。 當SelectedItem
被更改時,此屬性被自動設置爲 。它的 實際類型是從SelectedItem.Children
空虛推斷出來的。
TreeView
綁定到Items
和SelectedItem
。在這種情況下,不需要使用DataForm
來維護貨幣(而不是當前項目由TreeView
設置),也不需要負責創建和刪除項目。這就是爲什麼我決定只綁定其CurrentItem
查看模型的(ItemsSource
是未綁定)。其AutoCommit
設置爲False
(當它是True
和ItemsSource
未綁定時,當您在TreeView
中選擇不同的項目時,所有當前項目更改將被複制到新選擇的項目,這並不好)。 DataForm
字段是自動生成的。
顯然,現在如果我們選擇在TreeView
一個項目,然後讓在DataForm
一些變化,並嘗試在TreeView
,我們將得到著名
無法更改貨幣時選擇不同的項目一個項目 有驗證錯誤,或正在編輯 ,並且AutoCommit爲false。設置 的ItemsSource到ICollectionView到 管理貨幣,而不是
在這種情況下,我想DataForm
隱式地放棄所有更改。有一種解決方法,在之前調用DataForm.CancelEdit()
所選項目被更改(通常是類似PreviewSelectionChanged
或BeforeSelectionChanged
的事件)。但它不是MVVM的方式,因爲TreeView
和DataForm
在完全不同的視圖中定義(讀取:不可接受)。
是否有像AutoCancel這樣強制DataForm
取消其更改CurrentItem
更改?也許有人從開發團隊可以回答?或者你會如何處理這樣的問題?
錯誤消息很明顯:您需要堅持使用美元。正在編輯項目並且AutoCommit爲false時,您無法切換到歐元! :) – Skrymsli 2011-07-27 05:25:59