2016-04-17 40 views
0

我已经创建了一个errorMessage作为我的ViewModel中的字符串。当你得到一个错误或类似的东西时,我会用这个来向用户显示一条消息。在wpf中使用propertyChanged,绑定应该更新按钮单击

在视图模型

我已经实现了INotifyPropertyChanged接口,也是我创造了这个块:

#region INotifyPropertyChanged members 
    public event PropertyChangedEventHandler PropertyChanged; 

    protected void NotifyPropertyChanged([CallerMemberName] string propertyName = "") 
    { 
     if (PropertyChanged != null) 
     { 
      PropertyChanged(this, new PropertyChangedEventArgs(propertyName)); 
     } 
    } 

    #endregion 

在视图模型的顶部,我创建了一个名为的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设置为等于某些场景中的文本?

+0

已经设置您的视图的DataContext的到你的视图模型? – ChrisF

+0

您需要在属性的设置器中调用NotifyPropertyChanged,则不能使用Auto属性。 –

+0

ChrisF,是的,否则它不会工作,当我在构造函数中设置ErrorMessage时,它的上下文设置后,我想根据场景 – Raaydk

回答

1

您必须在set方法中调用NotifyPropertyChanged(“ErrorMessage”)。使用完全获取并设置访问器实现(使用私有变量)来扩展属性,然后在privateproperty = value行之后,在set方法中调用notifypropertychanged。

当属性更改时通知视图很重要。

小号

+0

更改errorMessage知道它现在终于工作了!谢谢。 – Raaydk

0

更改ErrorMessageProperty为:

private string errorMessage; 

    public string ErrorMessage 
    { 
     get { return errorMessage; } 
     set 
     { 
      errorMessage = value; 
      NotifyPropertyChanged("ErrorMessage"); 
     } 
    }