2014-10-20 81 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

相关问题