我有一个有两列ValueA
和ValueB
. 我需要在网格中显示表格,但我需要显示ValueA
或ValueB
,但不能同时显示两者。因此,如果ValueA
没有值,则ValueB
显示,反之亦然。当用户在列中输入值时,只ValueA
应更新。所以ValueB
在一种默认值(它在程序的另一部分中更新)。
我尝试使用 解决此问题MultiBinding
,但我只设法显示了这些值。用户输入到网格中的值总是被原始值覆盖。
我创建了一个名为的转换器ValueAValueBConverter
,它具有如下的 Convert 方法:
public object Convert(object[] values, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
if (values[0] != DependencyProperty.UnsetValue && values[0] != null && !string.IsNullOrEmpty(values[0].ToString()))
{
Debug.WriteLine("values 0: " + values[0]);
return values[0].ToString();
}
if (values[1] != DependencyProperty.UnsetValue && values[1] != null && !string.IsNullOrEmpty(values[1].ToString()))
{
Debug.WriteLine("values 1: " + values[1]);
return values[1].ToString();
}
return null;
}
还有一个 ConvertBack 方法(永远不会被调用):
public object[] ConvertBack(object value, Type[] targetTypes, object parameter, System.Globalization.CultureInfo culture)
{
return new object [] { value, value };
}
绑定列的 XAML 如下所示:
<toolkit:DataGridTextColumn Width="2*" Header="{x:Static localProperties:Resources.TValuesAB}">
<toolkit:DataGridTextColumn.Binding>
<MultiBinding Converter="{StaticResource myValueAValueBConverter}" Mode="TwoWay">
<Binding Path="ValueA" UpdateSourceTrigger="PropertyChanged" />
<Binding Path="ValueB" UpdateSourceTrigger="PropertyChanged" />
</MultiBinding>
</toolkit:DataGridTextColumn.Binding>
</toolkit:DataGridTextColumn>
我应该在 ViewModel 中执行此操作(我们正在使用 MVVM 模式)还是有任何其他方法可以使用 XAML 执行此操作?