WPF MVVM将文本框数据获取到ViewModel

时间:2017-03-02 10:44:43

标签: wpf xaml mvvm

我已经阅读了很多这方面的问题,到目前为止,我还没有找到关于这个看似简单问题的答案。

我有一个视图模型,其中包含一个属性。在我的XAML中,我有一个TextBox,它绑定了该属性。

但该物业似乎永远不会改变。

这是文本框:

<TextBox Grid.Row="1"
         Grid.Column="0"
         Margin="4"
         Text="{Binding CharNameFromTB}" />

ViewModel背后的相关代码:

private String _charNameFromTB;
String CharNameFromTB
{
    get { return _charNameFromTB; }

    set
    {
        if (!string.Equals(this._charNameFromTB, value))
        {
            this._charNameFromTB = value;
            RaisePropertyChanged("CharNameFromTB");
        }
    }
}

我在setter中的if语句上设置了一个断点,但它永远不会触发。我错过了一些明显的东西吗?我尝试将绑定模式设置为twoway,但这并没有改变任何东西。

这让我有点生气。任何帮助将不胜感激!

1 个答案:

答案 0 :(得分:3)

您应该创建属性public以便能够绑定它:

private String _charNameFromTB;
public String CharNameFromTB
{
    get { return _charNameFromTB; }

    set
    {
        this._charNameFromTB = value;
        RaisePropertyChanged("CharNameFromTB");
    }
}

还要确保已将DataContext或其任何父元素的TextBox设置为视图模型类的实例,其中CharNameFromTB属性已定义。

另请注意,默认情况下,TextBox失去焦点时会设置source属性。

如果要在每次击键时更新源属性,则应将UpdateSourceTrigger的{​​{1}}属性设置为Binding

PropertyChanged