【问题标题】:When RaisePropertyChanged will executed?RaisePropertyChanged 什么时候执行?
【发布时间】:2015-06-01 22:13:42
【问题描述】:

我无法在视图模型的 SET 属性中定位断​​点,因此默认值没有更改。 (Get - 没问题,它用有效的默认值初始化我的文本框。)

我有一个 model.cs 其中定义了公共字符串字段

model.cs
{
..
public textDefValue = "aaa";
}

这是一个 ViewModel

{
.. 
 Model model = new Model();
....
 public string TextField
        {
            get { return model.textDefValue; }
            set
            {
               //break point here
                model.textDefValue = value;
                RaisePropertyChanged(TextField);
            }
        }
 ....
   protected void RaisePropertyChanged(string propertyName)
        {
            PropertyChangedEventHandler handler = PropertyChanged;
            if (handler != null)
            {
                handler(this, new PropertyChangedEventArgs(propertyName));
            }
        }

        public event PropertyChangedEventHandler PropertyChanged;
}

还有 XAML:

<TextBox x:Name="myBox" Text="{Binding ViewModel.TextField, Mode=TwoWay}">

我想当我在这个文本框中输入一些东西时,SET 会起作用,我会定位一个断点,但是我无法在 SET 中点击这个断点。错误在哪里?

【问题讨论】:

  • ViewModel 是在哪里定义的,主要是它会遍历一个资源,然后被称为Text="{Binding TextField, Mode=TwoWay, Source={StaticResource KeyOfViewModelInResources}}"
  • 很难翻译所有这些,但问题可能与您的Binding有关。检查输出窗口以获取线索。此外,您不需要在 View Model 中创建一个属性来公开您的模型的属性。您可以改为绑定到模型的属性。

标签: c# wpf


【解决方案1】:

没有错误,只是误会。

默认情况下,控件的.Text 属性的绑定仅在您离开框时更新(即将焦点移动到不同的控件)。您需要单击或 Tab 键离开以更新值和命中断点。

您可以通过如下更新绑定来更改此行为:

Text="{Binding ViewModel.TextField, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"

这将导致每次文本值更改时绑定都会更新 - 即文本框中的每次按键。

【讨论】:

  • 对不起,这里还有一个问题 - 似乎我已经崩溃了一些东西((。不,Get 也没有工作 - 我已经添加了你建议的字符串,但是..我已经初始化了模型实例ViewModel 的构造函数,但在 XAML 中我有不同的数据上下文然后 ViewModel - 它是另一个类
  • @curiousity 这是一个完全不相关的问题,您需要使用相关代码提出一个新问题才能重新创建问题。
猜你喜欢
  • 2012-10-24
  • 1970-01-01
  • 1970-01-01
  • 2017-02-20
  • 2016-01-07
  • 1970-01-01
  • 2013-05-01
  • 2019-06-16
  • 2015-03-03
相关资源
最近更新 更多