初始化后WPF数据绑定无法正常工作

时间:2015-10-12 13:07:26

标签: c# wpf data-binding

我遇到了一些数据绑定问题。似乎值更新到表单显示之前,之后它没有兴趣更新。

在我看来,我有一个标签。

<Label  Background="{Binding info_bg}" Foreground="{Binding info_fg}" Margin="5" Grid.Row="0" FontFamily="Arial Rounded MT Bold" FontSize="24" Grid.Column="0" VerticalContentAlignment="Center" HorizontalContentAlignment="Center" >
    <Label.Content>
        <AccessText TextWrapping="Wrap" Text="{Binding info}" TextAlignment="Center" VerticalAlignment="Center" />
    </Label.Content>
</Label>

在背后的代码中

public Client()
{
    _cvm = new ClientViewModel();
    this.DataContext = _cvm;

    InitializeComponent();

}

在ClientViewModel类中(扩展具有INotifyPropertyChanged的CommonBase类)

public class ClientViewModel : CommonBase
{

    private string _info = "";
    public string info
    {
        get
        {
            return _info;
        }
        set
        {
            _info = value;
            NotifyPropertyChanged("info");
        }
    }

    public ClientViewModel()
    {
        this._info = "TEST UPDATE";
    }

当我运行此标签时,标签会按预期显示TEST UPDATE。在我的代码后面,我创建了一个Window_KeyUp事件,通过调用_cvm.ProcessKey(e.Key)将按下的键推送到ClientViewModel类;

public void ProcessKey(string key)
{
    this._info = key; 
}

MessageBox.Show(信息);给了我推送的密钥,所以我知道它正在通过,但View没有更新。

CommonBase类,以防我搞砸了。

public class CommonBase : INotifyPropertyChanged
{
    public event PropertyChangedEventHandler PropertyChanged;

    protected void NotifyPropertyChanged(string propertyName)
    {
        var handler = this.PropertyChanged;
        if (handler != null)
        {
            PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
        }
    }
}

谢谢。

1 个答案:

答案 0 :(得分:3)

请勿设置此字段this._info = key;

而是设置属性this.info = key;

这将调用属性集,并且将引发PropertyChanged事件。这就是视图所观察到的内容,因此它会做出回应。

(当你在它的时候,用大写的方式启动属性。)