我有一个用户控件,它包含一个组合框,它从一个枚举中获取它的值。我已经将该组合框绑定到模型的属性。每当我改变组合框的选择时,它也会改变模型的属性。我希望能够实现一个保存命令,以便组合框选择的值仅在使用保存命令时发生更改,并且如果用户想要取消更改,则可以保留原始数据。用数据绑定保存原始数据
一个解决方案,我认为它有单独的属性或单独的模型来包含数据,但它似乎是一个黑客和非常不雅。你会如何解决这个问题?
视图模型
<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