我有一个实体框架模型绑定到这样的对象:
public class Object
{
public string _name; //actual name
public string _display_name;
....
}
在大多数情况下,display_name 将与 actual_name 相同。因此,在 WPF 窗口中,我有一个带有两个输入(文本框)的视图。
第一个输入绑定到视图模型属性 DisplayName。这样做的目的是使第二个输入(显示名称)默认等于第一个(实际名称):
<TextBox x:Name="NameInputBox" Margin="5,5,5,5" Width="100" MaxLength="50"
Text="{Binding Path=Name, Mode=OneWayToSource, UpdateSourceTrigger=PropertyChanged}" />
第二个输入是使用 MultiBinding。MultiBinding 中的第一个绑定是到第一个输入的 Text 属性。这会正确地将第二个框更新为等于第一个框。
第二个绑定绑定到视图模型中的 DisplayName 属性。尽管第二个输入文本正在更改,但未设置 DisplayName 属性:
<TextBox x:Name="DisplayNameInput" Margin="5,5,5,5" Width="100" MaxLength="50">
<TextBox.Text>
<MultiBinding Converter="{StaticResource TwoToOneConverter}">
<Binding ElementName="NameInputBox" Path="Text" Mode="OneWay" UpdateSourceTrigger="PropertyChanged" />
<Binding Path="DisplayName" Mode="TwoWay" UpdateSourceTrigger="PropertyChanged" />
</MultiBinding>
</TextBox.Text>
</TextBox>
以下是属性:
public String Name
{
get { return _name; }
set
{
_name = value;
OnPropertyChanged("Name");
}
}
public string DisplayName
{
get { return _display_name; }
set
{
_display_name = value;
OnPropertyChanged("DisplayName");
}
}
最后,我的转换器:
/// <summary>
/// When given two inputs, just take one of them.
/// </summary>
public object Convert(object[] values, Type targetType, object parameter,
System.Globalization.CultureInfo culture)
{
return values[0];
}
/// <summary>
/// Return the value, unchanged, as two values.
/// </summary>
public object[] ConvertBack(object value, Type[] targetTypes, object parameter,
System.Globalization.CultureInfo culture)
{
return new object[] { value, value };
}
有人对我做错了什么有任何想法吗?我觉得它与转换器有关,因为我没有按照在线示例中描述的方式使用它。还有另一种方法可以实现我正在尝试的目标吗?