覆盖绑定的TextBox值

时间:2018-04-17 08:56:09

标签: c# wpf mvvm data-binding

窗口上有一个TextBox,其值被绑定以查看模型属性(简单,通常的绑定)。

<TextBox x:Name="textBoxName" Text="{Binding Name}"/>

现在我需要在TextBox上显示来自绑定或空字符串的值,具体取决于同一窗口(和视图模型)上的RadioButton值。

实现目标的一个想法是以编程方式清除绑定,设置空值,然后再次设置绑定。但我想这不是一个好的解决方案。

我是WPF和MVVM的新手,想听听应该如何正确地完成这项工作(&#34; MVVM方式&#34;)?

2 个答案:

答案 0 :(得分:0)

你可以在这里做一些事情。

  1. 根据单选按钮

  2. 上选择的内容更改名称属性的值
  3. 使用检查单选按钮值并更新文本框文本的转换器

  4. 更改单选按钮选择时,使用“触发器”更改文本框文本。

  5. 这三个都很容易实现,如果您需要任何代码,请告诉我。

答案 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"

这应该有效:

enter image description here