【问题标题】:How to bind one texblock value to other textblock one way and get value in MVVM如何以一种方式将一个文本块值绑定到另一个文本块并在 MVVM 中获取值
【发布时间】:2013-02-08 06:16:39
【问题描述】:

让我通过图片来解释我的问题

我的项目中有 MVVM 结构。 我有两个文本块,Textblock 1textblock 2。现在我想要 textblock2's Text 与 Textblock1's Text 相同,只要 Textblock1 的 Text 发生变化。 但我应该能够设置Textblock2'sTextblock1's 不同的文本。 所以我正在设置 Textblock1 的 Text 属性的 Oneway 绑定。

如何在 MVVM 中获取 Textblock2's 的 Text 属性。如果我为Textblock2's Text 属性创建一个属性,我将无法将Textblock1's 文本绑定到textblock2

如果我想进一步澄清我的问题,请告诉我。

感谢期待。

【问题讨论】:

    标签: .net wpf xaml mvvm xaml-binding


    【解决方案1】:

    在 VM 中使用两个属性,并在那里实现相等/覆盖逻辑。这正是虚拟机擅长的东西。

    VM 
      Prop1 <-- Binding- TextBlock1
      Prop2 <-- Binding- TextBlock2
    

    Prop1 设置器的实现使得它也更新 Prop2(不要忘记 INotifyPropertyChanged),如果您设置 Prop2 使其切换到并保持不同的值。

    【讨论】:

    • 感谢flq的回复,你能解释一下吗?
    • 在 Textblock 中,我绑定了一个类对象的属性。因此,如果类的其他字段发生更改,它会更改 prop2。因此,如果我更改 textblock1 的内容(即 cont1)然后更改 textblock2(即 cont2),并更改与类对象绑定的其他道具,我得到 textblock2 也更改为“cont1”
    【解决方案2】:

    这是与 flq 的答案一起使用的代码:

    public class MyViewModel : INotifyPropertyChanged
    {
        public event PropertyChangedEventHandler PropertyChanged;
    
        private string _text1;
        private string _text2;
    
        public string Text1
        {
            get { return _text1; }
            set
            {
                if (_text1 != value)
                {
                    _text1 = value;                    
    
                    RaisePropertyChanged("Text1");
    
                    Text2 = _text1;
                }
            }
        }        
    
        public string Text2
        {
            get { return _text2; }
            set
            {
                if (_text2 != value)
                {
                    _text2 = value;
    
                    RaisePropertyChanged("Text2");
                }
            }
        }
    
        public MyViewModel()
        {
    
        }
    
        private void RaisePropertyChanged(string propertyName)
        {
            if (PropertyChanged != null)
            {
                PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
            }
        }        
    }
    

    确保将绑定更改为双向。

    编辑:

    这是 XAML:

    <TextBox Text="{Binding Text1, UpdateSourceTrigger=PropertyChanged}" />
    <TextBox Text="{Binding Text2}" />
    

    设置 UpdateSourceTrigger=PropertyChanged 允许在您键入时更新属性,因此 TextBox2 将在您键入时更新。 (仅供参考 - TextBoxes 的默认绑定是双向的)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-12-14
      • 1970-01-01
      • 2012-06-20
      • 1970-01-01
      • 1970-01-01
      • 2011-10-07
      • 2018-10-06
      • 2016-04-16
      相关资源
      最近更新 更多