窗口上有一个TextBox
,其值被绑定以查看模型属性(简单,通常的绑定)。
<TextBox x:Name="textBoxName" Text="{Binding Name}"/>
现在我需要在TextBox
上显示来自绑定或空字符串的值,具体取决于同一窗口(和视图模型)上的RadioButton
值。
实现目标的一个想法是以编程方式清除绑定,设置空值,然后再次设置绑定。但我想这不是一个好的解决方案。
我是WPF和MVVM的新手,想听听应该如何正确地完成这项工作(&#34; MVVM方式&#34;)?
答案 0 :(得分:0)
你可以在这里做一些事情。
根据单选按钮
使用检查单选按钮值并更新文本框文本的转换器
更改单选按钮选择时,使用“触发器”更改文本框文本。
这三个都很容易实现,如果您需要任何代码,请告诉我。
答案 1 :(得分:0)
您可以使用多值转换器:
public class BooleanMultiValueConverter : IMultiValueConverter
{
public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture)
{
bool isChecked = (bool)values[0];
string name = (string)values[1];
return isChecked ? "" : name;
}
public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
}
然后你绑定你的TextBox
:
<StackPanel>
<TextBox>
<TextBox.Text>
<MultiBinding Converter="{StaticResource MultiValueConverter}" >
<Binding Path="IsChecked" ElementName="rb"/>
<Binding Path="Name"/>
</MultiBinding>
</TextBox.Text>
</TextBox>
<StackPanel Orientation="Horizontal">
<RadioButton Name="rb"/>
<RadioButton/>
</StackPanel>
</StackPanel>
将此作为直接子项添加到您的窗口:
<Window.Resources>
<converters:BooleanMultiValueConverter x:Key="MultiValueConverter"/>
</Window.Resources>
并且不要忘记添加名称空间:
xmlns:converters="clr-namespace:WPFTest.Converters"
这应该有效: