2016-12-08 27 views
1

现在我没有在我的程序中更新循环,我想避免有一个用于未来的灵活性,但我不确定这是否可能没有一个。每当函数返回true时没有更新循环会引发事件

如果我有一个布尔值,如:bool Update => a == b && c != d,是否有可能有一个函数自动调用,当这是真的。

另外,我知道我可以做这样的事情:

CheckUpdate() 
{ 
    if(Update) 
     *do something here* 
} 

但我想消息要发送的力矩值是真实的,而不是在更新环路检测到它是真实的。

+1

您可以检查'Update'并在由'a','b','c'和'd'的setters调用的函数中激发事件。 – Blorgbeard

+0

我也考虑过这个问题,但有一个问题是如果更新条件发生变化,我需要创建更多自定义设置器或从现有属性中删除自定义设置器。基本上,我期待以最干净的方式做到这一点。 –

回答

0

我想要一个州级班级,然后将您的活动附加到使用INotifyPropertyChanged

public class State: INotifyPropertyChanged 
{ 
    private string a; 
    private string b; 
    private string c; 
    private string d; 

    public event PropertyChangedEventHandler PropertyChanged; 

    // This method is called by the Set accessor of each property. 
    // The CallerMemberName attribute that is applied to the optional propertyName 
    // parameter causes the property name of the caller to be substituted as an argument. 
    private void NotifyPropertyChanged([CallerMemberName] string propertyName = "") 
    { 
     if (PropertyChanged != null) 
     { 
      PropertyChanged(this, new PropertyChangedEventArgs(propertyName)); 
     } 
    } 

    public string A 
    { 
     get { return this.a; } 
     set 
     { 
      if (value != this.a) 
      { 
       this.a= value; 
       NotifyPropertyChanged(); 
      } 
     } 
    } 

    ... so on and so forth ... 
} 

现在,所有你需要做的就是分配处理程序的属性更改......

var myState = new State(); 
myState += (sender,args) => 
{ 
    if(myState.A == myState.B && myState.C != myState.D) 
    { 
     // do stuff 
    } 
}; 

我使用的原因界面使对象可以在ObservableCollection中使用太多,如果需要。这样你可以同时管理多个状态。

0

尝试这样:

public class Foo 
{ 
    public Foo() 
    { 
     _update =() => a == b && c != d; 
    } 

    private Func<bool> _update; 

    private string a; 
    private string b; 
    private string c; 
    private string d; 
    private string e; 
    private string f; 
    private string g; 
    private string h; 

    private void CheckUpdate() 
    { 
     if (_update()) 
     { 
      /*do something here*/ 
     } 
    } 

    public string A { get { return a; } set { a = value; CheckUpdate(); } } 
    public string B { get { return b; } set { b = value; CheckUpdate(); } } 
    public string C { get { return c; } set { c = value; CheckUpdate(); } } 
    public string D { get { return d; } set { d = value; CheckUpdate(); } } 
    public string E { get { return e; } set { e = value; CheckUpdate(); } } 
    public string F { get { return f; } set { f = value; CheckUpdate(); } } 
    public string G { get { return g; } set { g = value; CheckUpdate(); } } 
    public string H { get { return h; } set { h = value; CheckUpdate(); } } 
} 

不要紧,你有多少属性,你只需要调用CheckUpdate()在每次更新。然后,您可以在任何时候,编译时或运行时更改_update,以满足您的要求。

相关问题