2016-02-15 4 views
0

У меня есть текстовое поле, и я хочу установить свойство Clr из ViewModel в другое свойство в ViewModel on Visibility Changed.Wpf: Установить свойство Clr в триггере

<TextBox Text="{Binding Property1}"> 
<TextBox.Style> 
<Style TargetType="TextBox" BasedOn="{StaticResource {x:Type TextBox}}"> 
     <Style.Triggers> 
     <Trigger Property="Visbility" Value="Collapsed"> 
      <Trigger.Setters> 
      ///Set Property1 = Property2 
      </Trigger.Setters> 
     </Trigger> 
</Style> 
</TextBox> 

Есть ли способ сделать это?

+0

В МОФ (+ MVVM) это обычно делается путем привязки свойства Visibility для элемента view к свойству 'bool' viewmodel через конвертер BoolToVisibility ([click] (http://stackoverflow.com/a/20189001/1997232)). – Sinatr

ответ

0

Используйте посредник DependencyProperty и правый BindingMode Комбинация для достижения желаемого Результат:

<TextBox Text="{Binding Property1}"> 
      <TextBox.Style> 
       <Style TargetType="TextBox" BasedOn="{StaticResource {x:Type TextBox}}"> 
        <Style.Triggers> 
         <Trigger Property="Visbility" Value="Collapsed"> 
          <Trigger.Setters> 
           <Setter Property="Tag" Value="{Binding Property2}" /> 
           <Setter Property="Tag" Value="{Binding Mode=OneWayToSource,Path=property1}" /> 
          </Trigger.Setters> 
         </Trigger> 
        </Style.Triggers> 
       </Style> 
      </TextBox.Style> 
     </TextBox> 

Я предполагаю, что вы хотите установить значение свойство2 (который также является свойство CLR) в property1, который будет в конечном итоге установить Text Недвижимость TextBox.

+0

Первоначально это свойство будет иметь значение null, потому что 'Tag' имеет значение null, поэтому это решение не будет работать для меня –

+0

@VivekSaurav, так что, хотя вы пытаетесь сделать это правильно? Также обновлен стиль для установки поведения привязки. –

0

Может быть способ сделать это. Вы связываете видимость TextBox к CLr собственности ВМ и в инкубаторе собственности видимости CLR изменить значение property1

<TextBox Text="{Binding Property1}" Visibility="{Binding Visibility, Converter={StaticResource ResourceKey=boolConvertor}}"></TextBox> 

и в ВМ

public bool Visibility 
    { 
     get { return visibility; } 
     set 
     { 
      visibility = value; 
      if (visibility == false) 
      { 
       Property1 = Property2; 
      } 
      OnPropertyChanged(); 
     } 
    }