2015-11-18 3 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}"/> 

Можно ли динамически связать Accepted или Включить свойство согласно свойству Mode?

  • Одно решение придумал использует IMultiValueConverter и MultiBinding. Это правильный метод?
+1

У вас есть контроль над viewmodel? почему бы не привязываться к новому свойству, значение которого отражает значение Accepted или Enable на основе значения Mode? –

ответ

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

Смежные вопросы