繁体   English   中英

WPF-绑定到ViewModel中的属性和其他控件

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM