2015-11-18 46 views
0

例如: 我们需要动态绑定一个RadioButton Value属性和ViewModel的两个不同属性。如何动态绑定WPF控件属性与ViewModels不同的属性?

视图模型

public class MyViewModel 
{ 

//Property-1 to bind with RadioButton 
     public bool Accepted 
     { 
      get; 
      set; 
     } 

//Property-2 to bind with RadioButton 
     public bool Enable 
     { 
      get; 
      set; 
     } 

//Property to Identify which property should bind with radio button. 
     public bool Mode 
     { 
      get; 
      set;   
     } 
} 

的XAML

<RadioButton Value="{Binding Accepted, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"/> 

是否有可能根据Mode属性动态绑定接受或启用财产 ?

  • 一种解决方案提出了使用IMultiValueConverter和MultiBinding。这是一个合适的方法吗?
+1

您是否对视景模型有所控制?为什么不绑定到一个新的属性,它的值是基于Mode的值反映Accepted或Enable的值? –

回答

3

您不能从视图模型更改绑定。然而,你可以创建你绑定到然后委托其值设置为正确的另一个值的新属性,例如:

public class ViewModel 
{ 
    public bool Prop1 { get; set; } 
    public bool Prop2 { get; set; } 
    public bool Use2 { get; set; } 

    public bool Prop 
    { 
     get { return Use2 ? Prop2 : Prop1; } 
     set 
     { 
      if (Use2) 
       Prop2 = value; 
      else 
       Prop1 = value; 
     } 
    } 
} 

当然这个例子中缺少INotifyPropertyChanged实施细则。

+0

我们需要为每个属性的更改新属性NotifyPropertyChanged。对 ? – vrnithinkumar

+1

是的,事件需要在那里对每个你想影响视图的属性进行更改。因此,在这种情况下,只能为Prop实现它,但是当您更改其他树属性时,您还需要记住为Prop提升事件,因为这会间接更改并更新视图。 – poke