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中的属性和其他控件?

WPF-绑定到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
    }
}