2014-10-20 92 views
0

在我的WPF應用程序(使用MVVM)中,我有一個CheckBox和一個TextBlock。當CheckBox被選中時,TextBlock的值將被保存。這兩個控件都綁定到我的ViewModel。下面簡單XAML:WPF - 綁定到ViewModel中的屬性和其他控件

<StackPanel> 
    <Label>Add to list</Label> 
    <CheckBox IsChecked="{Binding Path=AddItem}"></CheckBox> 
    <Label>Gross amount:</Label> 
    <TextBlock Text="{Binding Path=Amount}"></TextBlock> 
</StackPanel> 

現在我想有CheckBox當用戶開始在TextBlock鍵入檢查。我知道綁定可以做到這一點,但我已經綁定到我的ViewModel中的一個屬性。我如何綁定到ViewModel中的一個屬性以及其他控件?

+0

所以這個複選框應該是一種保存(到哪裏?)金額的方式,以及一種指示用戶已經開始輸入的方式?用戶在開始輸入時是否可以「保存」(複選框已經被選中)?也許你可以解釋這應該如何爲用戶工作? – 2014-10-20 14:22:45

+0

更確切地說:複選框綁定到ViewModel上的一個屬性。細節有點複雜,但不是主要問題。我有它處理。我遇到的問題是從textBlock到ViewModel以及從textBlock到checkBox的綁定。 – PiotrWolkowski 2014-10-20 14:27:31

+0

讓我強調一下,一旦你離開控件而不是每個字符輸入事件,就會觸發文本輸入控件綁定。所以你可能對每個字符輸入事件感興趣,然後在那裏設置布爾標誌。 – 2014-10-20 15:31:18

回答

2

您應該使用multibinding。事情是這樣的:

<CheckBox Content="CheckBox" HorizontalAlignment="Left" Margin="191,82,0,0" VerticalAlignment="Top"> 
      <CheckBox.IsChecked> 
       <MultiBinding Converter="{StaticResource checkConverter}"> 
        <Binding Path="IsChecked"/> 
        <Binding Path="UserStartedTyping"/> 
       </MultiBinding> 
      </CheckBox.IsChecked> 
</CheckBox> 

checkConverter是你爲了決定如何處理你與(如& &,||等)結合數值確實需要一個MultiValueConverter。

public class CheckConverter : IMultiValueConverter 
    { 
     public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture) 
     { 
      return (bool)((bool)values[0] || (bool)values[1]); 

     } 

     public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture) 
     { 
      object[] splitValues = { value, false }; 
      return splitValues; 
     } 
    } 

UserStartedTyping是ViewModel中的一個屬性,當KeyDown事件觸發時它將被設置爲true。

希望它有幫助。

+0

這很有效。謝謝。 – PiotrWolkowski 2014-10-20 16:02:01

0

你可以嘗試的AddItem設置爲true,當用戶開始改變量值:

private string _amt; 

public string Amount 
{ 
    get{return _amt;} 
    set 
    { 
     _amt = value; 
     if(AddItem == false) 
      AddItem = true; 

     //PropertyChanges here 
    } 
} 
+0

感謝您的回覆。理想情況下,我更願意在XAML中完成所有操作,並儘可能簡化ViewModel。 – PiotrWolkowski 2014-10-20 14:51:38

相關問題