【问题标题】:MVVM - binding to check box if checkbox checkedMVVM - 如果选中复选框,则绑定到复选框
【发布时间】:2012-06-16 15:46:15
【问题描述】:

我想将字符串值绑定到文本框,但前提是选中了复选框。因此,如果选中该复选框,我希望文本框显示消息 1,如果没有,则显示消息 2。

最好的方法是什么?在我的对象中使用 List 属性是否更好,然后取决于复选框是否被选中取决于显示 List 中的哪个项目

复选框被选中后,只更新对象的属性(这次是字符串类型)然后重新绑定会更好吗?

【问题讨论】:

    标签: data-binding mvvm


    【解决方案1】:

    这是一种 MVVM 类型的方法,假设您了解 INotifyPropertyChanged(您需要!)。玩它,随时询问您遇到的任何问题。

    VM(视图模型代码)

    public class MyViewModel : INotifyPropertyChanged {
    
        const string Msg1 = "blah 1";
        const string Msg2 = "blah 2";
    
        private bool _isSelected;
        public bool IsSelected{
            get { return _isSelected; }
            set {
                if(_isSelected == value) return;
    
                _isSelected = value;
                MyBoundMessage = _isSelected ? Msg1 : Msg2;
    
                NotifyPropertyChanged(()=> IsSelected);
                NotifyPropertyChanged(()=> MyBoundMessage);
            }
        }
    
        public string MyBoundMessage {get;set;}
    }
    

    V(查看 XAML)

    <CheckBox IsChecked="{Binding IsSelected}" />
    <TextBox Text="{Binding MyBoundMessage}" />
    

    【讨论】:

    • 谢谢。这很棒。抱歉,我的回复延迟了。
    • 只是想指出复选框没有属性“IsSelected”,您应该设置属性“IsChecked”。另外,请确保将属性值括起来。
    • OrahSoft,DataBinding你需要学习一下——对象的名字不相关
    • if(_isSelected = value) 应该是if(_isSelected == value) 吗?我认为这应该是比较而不是分配?
    • 如果这是用于复选框数据网格中的复选框,是否绑定到 INotifyPropertyChanged 会产生无法获取 GarbageCollected 的内容,因为您从未取消挂钩?如果没有,哪里是迭代集合以解除挂钩的好地方?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-09-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-04
    • 2014-07-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多