我有一個用戶控件,它包含一個組合框,它從一個枚舉中獲取它的值。我已經將該組合框綁定到模型的屬性。每當我改變組合框的選擇時,它也會改變模型的屬性。我希望能夠實現一個保存命令,以便組合框選擇的值僅在使用保存命令時發生更改,並且如果用戶想要取消更改,則可以保留原始數據。用數據綁定保存原始數據
一個解決方案,我認爲它有單獨的屬性或單獨的模型來包含數據,但它似乎是一個黑客和非常不雅。你會如何解決這個問題?
視圖模型
<StackPanel Grid.Column="1" Grid.Row="2" Margin="8, 0, 0, 0">
<Label Content="Current Status"/>
<ComboBox SelectedValue="{Binding SelectedRequest.CurrentStatus}" ItemsSource="{Binding Source={extension:EnumBindingSource {x:Type Requests:RequestStatus}}}"/>
</StackPanel>
請求
public class Request
{
public RequestStatus CurrentStatus {get; set;}
.......
}
RequestStatus
public enum RequestStatus
{
Created,
Prepared,
Delivered
}
如果你想有一些特定的狀態的多個版本,並且要保存/恢復這種狀態,那麼你應該把它放在一個班。你將有兩個屬性:Request Request和Request EditingRequest。當用戶開始編輯Request時,他們實際上是在EditingRequest中編輯一個克隆。當他們點擊Save時,'Request'被替換爲'EditingRequest'的新克隆。如果他們點擊取消,則用'Request'的新克隆替換'EditingRequest'。這對我來說足夠優雅。如果你感覺輕快,你也可以給他們一個撤銷/重做堆棧。 。 –
也許'請求'不是你想要保存/恢復的狀態單元;如果只使用'RequestStatus'枚舉的值而不是'Request'的實例來應用相同的原則。 –
我正在考慮做類似的事情,但我對mvvm和wpf很陌生,所以我不完全確定這是否是標準方式或最佳做法來處理這種情況。感謝您的建議! – SirGoose