DataGridと2つの列があります。
最初のもの:LimitTypeと2番目のもの:LimitValueです。
例:最初の列:0-お金の種類の場合、1-パーセントの種類の場合2番目の列:最初の列が0の場合、値をお金の形式で表示し、それ以外の場合はパーセントの形式で表示します。
最初の列の値に応じて2番目の列をフォーマットするにはどうすればよいですか。Converterを使用して実行しようとしましたが、最初の列の値をパラメーターとして渡すことができません...
DataGridの列定義でオブジェクト自体をバインドしてみることができます。
私はそのようなことを考えています:
<DataGridTextColumn Header="Value" Binding="{Binding Converter={StaticResource valueFormatConverter}}" />
しかし、引数のない単純なBindingは、私が期待するようにオブジェクトに直接バインドしているようには見えないので、トリックを使用して、オブジェクト自体を参照するメンバーをクラスに追加します。
public class DummyClass
{
public int Type { get; set; }
public int Value { get; set; }
public DummyClass MySelf { get; set; }
}
次に、バインディングで使用できます。
<DataGridTextColumn Header="Value" Binding="{Binding MySelf, Converter={StaticResource valueFormatConverter}}" />
これがコンバーターです:
public class ValueFormatConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
var v = (MainWindow.DummyClass)value;
if (v.Type == 0)
{
return v.Value + " (Type 0)"; // Do your formatting here
}
else if (v.Type == 1)
{
return v.Value + " (Type 1)"; // Do your formatting here
}
[...]
私は解決策を見つけました。
DataGridTextColumnは、最初の列と2番目の列の両方の値のMultiplyBindingタイプにバインドする必要があります。