如何在Silverlight中取消组合框选择?

如何在Silverlight中取消组合框选择?,silverlight,xaml,data-binding,mvvm,Silverlight,Xaml,Data Binding,Mvvm,短篇小说 我有一个BindingExpression对象,我想更新绑定的目标端,就像我可以对源端进行更新一样(通过调用BindingExpression.UpdateSource)。我怎么做 WPF也有类似的问题,我不知道如何适应Silverlight: 说来话长 给定一个双向绑定,将组合框的SelectedItem绑定到视图模型的属性。组合框用于导航,因此通过选择该组合框,用户可以通知视图模型进行导航。视图模型可能有一些用户不希望意外丢失的未保存更改。因此,视图模型抛出一个确认对话框,询问用户

短篇小说

我有一个BindingExpression对象,我想更新绑定的目标端,就像我可以对源端进行更新一样(通过调用BindingExpression.UpdateSource)。我怎么做

WPF也有类似的问题,我不知道如何适应Silverlight:

说来话长

给定一个双向绑定,将组合框的SelectedItem绑定到视图模型的属性。组合框用于导航,因此通过选择该组合框,用户可以通知视图模型进行导航。视图模型可能有一些用户不希望意外丢失的未保存更改。因此,视图模型抛出一个确认对话框,询问用户是否真的想离开并放弃他们的更改。如果用户说不,我们希望撤消对组合框所做的选择,使其处于原始状态,就像在尝试导航之前一样。我怎么做

适用于WPF人员
请注意,Silverlight中没有UpdateTarget方法(据我所知),因此提出了这个问题。

如果我理解正确,当属性更改时,您应该将
SelectedItem
backing字段的先前值存储在视图模型的一个属性上,当用户决定取消确认对话框时,您应该将
SelectedItem
backing字段恢复为以前的值

如果正在为备份字段使用常规属性,则可以编写实现此行为的Set方法:

    private object selectedItemPreviousValue;
    private object selectedItemBackingField;
    public object SelectedItemBackingField
    {
        get
        {
            return selectedItemBackingField;
        }
        set
        {
            selectedItemPreviousValue = selectedItemBackingField;
            selectedItemBackingField = value;
        }
    }
如果您使用的是dependencie属性,则必须为
PropertyMetada
提供
DependencyPropertyChantaged
回调,如下所示:

public object SelectedItemBackingField
    {
        get { return (object)GetValue(SelectedItemBackingFieldProperty); }
        set { SetValue(SelectedItemBackingFieldProperty, value); }
    }

    // Using a DependencyProperty as the backing store for SelectedItemBackingField.  This enables animation, styling, binding, etc...
    public static readonly DependencyProperty SelectedItemBackingFieldProperty =
        DependencyProperty.Register("SelectedItemBackingField", typeof(object), typeof(MapApp), new PropertyMetadata(new PropertyChangedCallback(OnSelectedItemChanged));

    public static OnSelectedItemChanged(DependencyObject sender, DependencyPropertyChangedEventArgs args)
    {
        MyViewModel vm = (MyViewModel)sender;
        vm.selectedItemPreviousValue = args.OldValue;
    }

是的,我最后做了这个。但是,我希望有人告诉我如何更新手头有BindingExpression对象的绑定的目标端。