我遇到了一些数据绑定问题。似乎值更新到表单显示之前,之后它没有兴趣更新。
在我看来,我有一个标签。
<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));
}
}
}
谢谢。
答案 0 :(得分:3)
请勿设置此字段this._info = key;
而是设置属性this.info = key;
这将调用属性集,并且将引发PropertyChanged事件。这就是视图所观察到的内容,因此它会做出回应。
(当你在它的时候,用大写的方式启动属性。)