C# WPF-绑定到ViewModel中的属性和其他控件
在我的WPF应用程序(使用MVVM)中,我有一个C# WPF-绑定到ViewModel中的属性和其他控件,c#,wpf,xaml,mvvm,C#,Wpf,Xaml,Mvvm,在我的WPF应用程序(使用MVVM)中,我有一个复选框和一个文本块。选中复选框时,将保存文本块中的值。这两个控件都绑定到myViewModel。下面是简化的XAML: <StackPanel> <Label>Add to list</Label> <CheckBox IsChecked="{Binding Path=AddItem}"></CheckBox> <Label>Gross amount:&
复选框
和一个文本块
。选中复选框时,将保存文本块中的值。这两个控件都绑定到myViewModel
。下面是简化的XAML:
<StackPanel>
<Label>Add to list</Label>
<CheckBox IsChecked="{Binding Path=AddItem}"></CheckBox>
<Label>Gross amount:</Label>
<TextBlock Text="{Binding Path=Amount}"></TextBlock>
</StackPanel>
添加到列表中
总额:
现在,当用户开始在文本块中键入内容时,我希望选中复选框
。我知道绑定可以做到这一点,但我已经绑定到我的ViewModel
中的属性。如何绑定到ViewModel
中的属性和其他控件?当用户开始更改金额值时,可以尝试将AddItem设置为true:
private string _amt;
public string Amount
{
get{return _amt;}
set
{
_amt = value;
if(AddItem == false)
AddItem = true;
//PropertyChanges here
}
}
您应该使用多重绑定。大概是这样的:
<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>
UserStartedTyping是ViewModel中的一个属性,当触发KeyDown事件时,该属性将设置为true
希望有帮助。所以复选框应该既是一种保存(到哪里?)金额的方式,也是一种指示用户已开始键入的方式?当用户开始输入时,是否应该能够“保存”(此时复选框已被选中)?也许您可以解释这对用户是如何工作的?更准确地说,复选框绑定到ViewModel上的属性。细节有点复杂,但这不是主要问题。我已经处理好了。我遇到的问题是从textBlock到ViewModel以及从textBlock到复选框的绑定。让我强调一下,文本输入控件绑定将在您离开控件后触发,而不是通过每字符输入事件触发。所以您可能对每字符输入事件感兴趣,然后在那里设置布尔标志。@Yury Schkatula:我将UpdateSourceTrigger设置为PropertyChanged,所以应该可以。谢谢您的回复。理想情况下,我更愿意在XAML中完成这一切,并使我的ViewModel尽可能简单。
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;
}
}