2013-03-13 40 views
0

一个单一的财产我怎样才能绑定我的视图模型内的多个控制值,以一个单一的财产绑定多个元素值内视图模型

无效CODE:对物业照常

 <MultiBinding Converter="{StaticResource myMultiConverter}"> 
      <!--Convert From these element--> 
      <From ElementName="check1" Path="IsChecked" /> 
      <From ElementName="check2" Path="IsChecked" /> 
      <From ElementName="check3" Path="IsChecked" /> 
      <From ElementName="check4" Path="IsChecked" /> 
      <!--To Viewmodel Property--> 
      <To ElementName="myViewModelProperty" /> 
     </MultiBinding> 

     <CheckBox Name="check1"></CheckBox> 
     <CheckBox Name="check2"></CheckBox> 
     <CheckBox Name="check3"></CheckBox> 
     <CheckBox Name="check4"></CheckBox> 

回答

0

绑定

<CheckBox Name="check1" IsChecked="{Binding Path=myViewModelProperty}" /> 
<CheckBox Name="check2" IsChecked="{Binding Path=myViewModelProperty}" /> 
<CheckBox Name="check3" IsChecked="{Binding Path=myViewModelProperty}" /> 
<CheckBox Name="check4" IsChecked="{Binding Path=myViewModelProperty}" /> 

然后,在视图模型:

public Boolean myViewModelProperty 
    { 
     get { ...  } 

     set { ...  } 
    } 

另外在视图模型,在需要的时候:

this.RaisePropertyChanged<Boolean>(() => this.myViewModelProperty); 

,如果你想(即使我不明白4复选框以相同的属性^^)您可以在一个属性绑定尽可能多元素的值

MultiBinding用于将ONE元素值绑定到MANY ViewModel属性。

编辑:考虑一个事实,即4复选框必须被转换成一个枚举:

<CheckBox Name="check1" IsChecked="{Binding Path=myViewModelProperty1}" /> 
<CheckBox Name="check2" IsChecked="{Binding Path=myViewModelProperty2}" /> 
<CheckBox Name="check3" IsChecked="{Binding Path=myViewModelProperty3}" /> 
<CheckBox Name="check4" IsChecked="{Binding Path=myViewModelProperty4}" /> 


    public Boolean myViewModelProperty1 
    { 
     get 
     { 
      return this.b1; 
     } 
     set 
     { 
      this.b1 =value; 
      this.EvaluateMyEnum(); 
     } 
    } 

    public Boolean myViewModelProperty2 
    { 
     get 
     { 
      return this.b2; 
     } 
     set 
     { 
      this.b2 =value; 
      this.EvaluateMyEnum(); 
     } 
    } 

    public Boolean myViewModelProperty3 
    { 
     get 
     { 
      return this.b2; 
     } 
     set 
     { 
      this.b2 =value; 
      this.EvaluateMyEnum(); 
     } 
    } 

    public Boolean myViewModelProperty4 
    { 
     get 
     { 
      return this.b4; 
     } 
     set 
     { 
      this.b4 =value; 
      this.EvaluateMyEnum(); 
     } 
    } 

    void EvaluateMyEnum() 
    { 
     this.MyViewModelEnum = ......; 
     this.RaisePropertyChanged<MyEnum>(() => this.myViewModelEnum); 
    } 
+0

我知道,但我需要这些布尔转换为枚举。我可以做到这些,但不是随便的方式。 –

+0

您需要的是绑定视图模型的属性上的每个元素值。所以4复选框绑定在虚拟机中的4布尔值。然后,在ViewModel中,执行将4布尔转换为期望的枚举的过程。 – Xaruth

+0

我编辑了我的答案。希望这对你有所帮助。 – Xaruth