在数据模型中没有调用Setter TextBox Text属性

时间:2014-06-06 20:16:26

标签: c# wpf mvvm textbox

在我的一个数据模型中,我有string属性绑定到textBox的文本。当我更改此textBox的文本时,我想更新另一个ViewModel中的属性。为了实现这一点,我相信我必须在属性的setter下执行操作,但每当我更改textbox的文本时,被调用的string属性的唯一区域就是getter。必须有一些我不知道或忽略的东西..

这是我正在使用的字符串属性,以防它有助于查看它:

public string DisplayName
{
    get { return _displayName; }
    set
    {
        _displayName = value;
        NotifyPropertyChange(() => DisplayName);

        //These values are from the other ViewModel
        if (MainTreeCollection.SelectedItem != null
               && value != MainTreeCollection.SelectedItem.DisplayName)
             MainTreeCollection.SelectedItem.DisplayName = value;
    }
}

我注意到在this question中他展示了如何“让[他的] ViewModel知道用户何时更改TextBox中的文字并将焦点从TextBox移开”。看起来他已经通过绑定到string属性来实现这一点,这就是我上面所做的。

怎么没有访问该物业的二传手?如何更改我的方法和代码以执行这些操作?

更新:这是textBox所要求的xaml:

<TextBox Text="{Binding Model.DisplayName}" Height="23"
         HorizontalAlignment="Left" Name="title_TB"
         VerticalAlignment="Top" Width="Auto" FontWeight="Bold"
         FontSize="14" Margin="5,2,0,0" />

1 个答案:

答案 0 :(得分:1)

如果您想在键入时设置有界属性,请将UpdateSourceTrigger设置为 PropertyChanged

TextBox的默认值为 LostFocus ,即仅当为TextBox引发LostFocus事件时,有界属性才会更新。

<TextBox Text="{Binding Model.DisplayName,
                        UpdateSourceTrigger=PropertyChanged}"
         Height="23" HorizontalAlignment="Left" Name="title_TB"
         VerticalAlignment="Top" Width="Auto" FontWeight="Bold"
         FontSize="14" Margin="5,2,0,0"/>