绑定的输入框只有在焦点变化后才会设置属性。

3
在我的XAML中,我有一个文本框与视图模型中的属性绑定:
XAML:
<TextBox HorizontalAlignment="Left" Height="30" Margin="10,10,0,0" TextWrapping="Wrap" Text="{Binding City}" VerticalAlignment="Top" Width="191" Grid.Column="1" Grid.Row="6"/>

视图模型:

public class MyViewModel : INotifyPropertyChanged
{
    ...
    public string City
    {
        get { return _model.Address.City; }
        set
        {
            if (_model.Address.City != value)
            {
                _model.Address.City = value;
                RaisePropertyChanged("City");
            }
        }
    }
    ...
}

双向数据绑定很好用,但似乎只有在从城市输入框切换到其他对象时才会设置属性值。

我想在按下热键(ENTER)时保存我的上下文。现在,当我输入一个城市并按下ENTER后,该属性不包含新值。当我输入一个城市,将焦点切换到另一个对象并按下ENTER时,该属性包含正确的值。

如何解决这个问题?


我猜你的示例代码只是一个打字错误...你展示的是对Country属性的绑定,但是你的VM显示的是City属性。 - Mashton
你是对的。抱歉。已修复。 - mosquito87
1个回答

10

使用UpdateTrigger并将其设置为PropertyChanged

<TextBox HorizontalAlignment="Left" Height="30" Margin="10,10,0,0" TextWrapping="Wrap" Text="{Binding Country, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}" VerticalAlignment="Top" Width="191" Grid.Column="1" Grid.Row="6"/>

没有区别。我输入一个城市,按下回车键,然后该属性的值仍然为NULL。 - mosquito87
@mosquito87,你的输出中有任何绑定错误吗? - user3596113
@mosquito87,你的Address类实现了iNotifyPropertyChanged吗? - user3596113
属性的设置方法没有被调用。这与绑定无关。只有在焦点改变时才会被调用。 - mosquito87
当然可以。数据绑定很好地工作着。我的唯一问题是该属性的setter仅在更改焦点后才被调用了一次。 - mosquito87
你尝试在XAML中将绑定的“Mode”设置为“TwoWay”了吗? - user3596113

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接