ValueA
と の 2 つの列を持つテーブルがあります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 でこれを行う他の方法はありますか?