[英]WPF - binding to a property in ViewModel and to other control
在我的WPF应用程序中(使用MVVM),我有一个CheckBox
和一个TextBlock
。 选中CheckBox
后,将保存TextBlock
的值。 这两个控件都与我的ViewModel
有绑定。 下面简化了XAML:
<StackPanel>
<Label>Add to list</Label>
<CheckBox IsChecked="{Binding Path=AddItem}"></CheckBox>
<Label>Gross amount:</Label>
<TextBlock Text="{Binding Path=Amount}"></TextBlock>
</StackPanel>
现在,我想在用户开始输入TextBlock
时选中CheckBox
。 我知道绑定可以做到这一点,但是我已经绑定到了ViewModel
一个属性。 如何绑定到ViewModel
的属性和其他控件?
您应该使用多重绑定。 像这样:
<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。
希望能帮助到你。
您可以尝试在用户开始更改金额值时将AddItem设置为true:
private string _amt;
public string Amount
{
get{return _amt;}
set
{
_amt = value;
if(AddItem == false)
AddItem = true;
//PropertyChanges here
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.