首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何取消Silverlight中的组合框选择?

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

Stack Overflow用户
提问于 2012-12-05 16:06:04
回答 1查看 197关注 0票数 0

短篇小说

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

对于WPF也有类似的问题,我不知道如何适应Silverlight:Cancel combobox selection in WPF with MVVM

长篇小说

给定将组合框的SelectedItem绑定到视图模型的属性的双向绑定。组合框用于导航,以便通过选择用户告诉视图模型导航。视图模型可以进行一些未保存的更改,用户不希望意外地松掉这些更改。因此,视图模型会抛出一个确认对话框,询问用户是否真的想要导航并放松他们的更改。如果用户拒绝,我们希望撤消对组合框的选择,使其处于原始状态,就像进行导航尝试之前一样。我该怎么做呢?

For WPF people请注意,Silverlight中没有UpdateTarget方法(据我所知),所以这就是提出这个问题的原因。

EN

回答 1

Stack Overflow用户

发布于 2012-12-05 18:19:19

如果我正确地理解了您的意思,当属性更改时,您应该将SelectedItem支持字段的前一个值存储在视图模型的一个atrribute上,并且当用户决定取消确认对话框时,您应该将SelectedItem备份字段恢复到以前的值。

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

代码语言:javascript
运行
复制
    private object selectedItemPreviousValue;
    private object selectedItemBackingField;
    public object SelectedItemBackingField
    {
        get
        {
            return selectedItemBackingField;
        }
        set
        {
            selectedItemPreviousValue = selectedItemBackingField;
            selectedItemBackingField = value;
        }
    }

如果使用的是依赖关系属性,则必须为PropertyMetada提供一个DependencyPropertyChantged回调,如下所示:

代码语言:javascript
运行
复制
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;
    }
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13727408

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档