2013-08-05 55 views
1

我有几个指南针属性,每个边和一个方向属性。我将方向绑定到组合框,并且在设置指南针点的方向的setter中有一个case语句。当Datacontext值发生变化时刷新文本框

我遇到的问题是UI不刷新。如果我关闭表单并重新打开它,数据已更改为正确的值,但UI不会动态更改。

我需要做什么?

回答

2

对于使用WPF的案例,您正在寻找INotifyPropertyChanged界面,该界面允许您将带有该属性的消息“发送”到UI。

晴它在被称为ViewModelBase基地:

public class ViewModelBase : INotifyPropertyChanged 
{ 
    /// <summary> 
    /// Raised when a property on this object has a new value 
    /// </summary> 
    public event PropertyChangedEventHandler PropertyChanged; 

    /// <summary> 
    /// Raises this ViewModels PropertyChanged event 
    /// </summary> 
    /// <param name="propertyName">Name of the property that has a new value</param> 
    protected void SendPropertyChanged(string propertyName) 
    { 
     SendPropertyChanged(new PropertyChangedEventArgs(propertyName)); 
    } 

    /// <summary> 
    /// Raises this ViewModels PropertyChanged event 
    /// </summary> 
    /// <param name="e">Arguments detailing the change</param> 
    protected virtual void SendPropertyChanged(PropertyChangedEventArgs e) 
    { 
     var handler = this.PropertyChanged; 
     if (handler != null) 
     { 
      handler(this, e); 
     } 
    } 

    public void SendPropertyChanged<TProperty>(Expression<Func<TProperty>> property) 
    { 
     var lambda = (LambdaExpression)property; 

     MemberExpression memberExpression; 
     if (lambda.Body is UnaryExpression) 
     { 
      var unaryExpression = (UnaryExpression)lambda.Body; 
      memberExpression = (MemberExpression)unaryExpression.Operand; 
     } 
     else 
     { 
      memberExpression = (MemberExpression)lambda.Body; 
     } 
     SendPropertyChanged(memberExpression.Member.Name); 
    } 

    //.Net 4.5? or 4 and BCL included? 
    /// <summary> 
    /// Raises this ViewModels PropertyChanged event 
    /// </summary> 
    /// <param name="propertyName">Name of the property that has a new value</param> 
    protected void SendPropertyChanged([CallerMemberName]string propertyName = "") 
    { 
     SendPropertyChanged(new PropertyChangedEventArgs(propertyName)); 
    }  
} 

SendPropertyChanged(() => Property)SendPropertyChanged("Property")到您的调节器和UI将

+0

感谢更新!这有帮助! – Herrozerro

+0

随意问:-) – Venson

+0

我的意思是它的工作! – Herrozerro

相关问题