在 wpf 中使用 propertyChanged,绑定应在单击按钮时更新
Using propertyChanged in wpf, binding should update on button click
我在我的 ViewModel 中创建了一个字符串形式的 errorMessage。当您遇到错误或类似问题时,我将使用这个向用户显示消息。
在 ViewModel 中
我已经实现了 INotifyPropertyChanged 接口,我也创建了这个块:
#region INotifyPropertyChanged members
public event PropertyChangedEventHandler PropertyChanged;
protected void NotifyPropertyChanged([CallerMemberName] string propertyName = "")
{
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
}
#endregion
在 ViewModel 之上,我创建了一个名为 ErrorMessage 的字符串。
public string ErrorMessage { get; set; }
在构造函数中,我用
测试了它
ErrorMessage = "Error message";
加载时我可以在我的视图中看到文本。
问题是当我在 try / catch 块中遇到异常并将错误设置为文本时,它不会得到更新。
在异常或单击按钮时,我尝试输入:
ErrorMessage = "No rooms with entered settings were found";
景色
<StackPanel Margin="10, 5" Grid.Row="5" Grid.ColumnSpan="3">
<TextBlock FontFamily="../Fonts/bold.ttf#bold" Height="40" Foreground="Red" Text="{Binding ErrorMessage, UpdateSourceTrigger=PropertyChanged}"></TextBlock>
</StackPanel>
如果向右滚动,您可以看到我已经绑定了 ErrorMessage 并为其指定了 UpdateSourceTrigger=PropertyChanged。
我需要什么才能在我的 ViewModel 中将 ErrorMessage 设置为某些情况下的文本?
您必须在设置方法中调用 NotifyPropertyChanged("ErrorMessage")。使用完整的 get 和 set 访问器实现(使用私有变量)扩展您的 属性,然后在 private属性= 值行之后调用 notify属性changed 在 set 方法中。
属性 更改时通知您的视图很重要。
S
将您的 ErrorMessage
Property
更改为:
private string errorMessage;
public string ErrorMessage
{
get { return errorMessage; }
set
{
errorMessage = value;
NotifyPropertyChanged("ErrorMessage");
}
}
我在我的 ViewModel 中创建了一个字符串形式的 errorMessage。当您遇到错误或类似问题时,我将使用这个向用户显示消息。
在 ViewModel 中
我已经实现了 INotifyPropertyChanged 接口,我也创建了这个块:
#region INotifyPropertyChanged members
public event PropertyChangedEventHandler PropertyChanged;
protected void NotifyPropertyChanged([CallerMemberName] string propertyName = "")
{
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
}
#endregion
在 ViewModel 之上,我创建了一个名为 ErrorMessage 的字符串。
public string ErrorMessage { get; set; }
在构造函数中,我用
测试了它 ErrorMessage = "Error message";
加载时我可以在我的视图中看到文本。 问题是当我在 try / catch 块中遇到异常并将错误设置为文本时,它不会得到更新。
在异常或单击按钮时,我尝试输入:
ErrorMessage = "No rooms with entered settings were found";
景色
<StackPanel Margin="10, 5" Grid.Row="5" Grid.ColumnSpan="3">
<TextBlock FontFamily="../Fonts/bold.ttf#bold" Height="40" Foreground="Red" Text="{Binding ErrorMessage, UpdateSourceTrigger=PropertyChanged}"></TextBlock>
</StackPanel>
如果向右滚动,您可以看到我已经绑定了 ErrorMessage 并为其指定了 UpdateSourceTrigger=PropertyChanged。
我需要什么才能在我的 ViewModel 中将 ErrorMessage 设置为某些情况下的文本?
您必须在设置方法中调用 NotifyPropertyChanged("ErrorMessage")。使用完整的 get 和 set 访问器实现(使用私有变量)扩展您的 属性,然后在 private属性= 值行之后调用 notify属性changed 在 set 方法中。
属性 更改时通知您的视图很重要。
S
将您的 ErrorMessage
Property
更改为:
private string errorMessage;
public string ErrorMessage
{
get { return errorMessage; }
set
{
errorMessage = value;
NotifyPropertyChanged("ErrorMessage");
}
}