WPF-绑定到ViewModel中的属性和其他控件
本文关键字:属性 其他 控件 绑定 ViewModel WPF- | 更新日期: 2023-09-27 18:27:14
在我的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
}
}