0

MVVM を使用して itemssource がモデルにバインドされているデータグリッドがあります。データはストアド プロシージャによって返されます。コード「A」の行などの特定の行について、特定の列にのみデータを表示したいのですが、残りの列には空の文字列を表示する必要があります。このためのコンバーターを作成するにはどうすればよいですか?

4

1 に答える 1

1

それを行うにはいくつかの方法があります。
最初の簡単なアプローチは、適切なデータ バインディングが得られるように、モデル自体のデータをマッサージすることです。
もう 1 つのアプローチは、正面からのモデルです。これがその方法です。クラス Product があり、その中に Name と Color があるとします。色が赤の場合、名前を表示したくありません。したがって、私の XAML は次のようになります。

    <sdk:DataGrid x:Name="grid" AutoGenerateColumns="False" HorizontalAlignment="Left" Height="300" VerticalAlignment="Top" 
                  Width="400">
        <sdk:DataGrid.Columns>
            <sdk:DataGridTextColumn Binding="{Binding Converter={StaticResource MyConverter}, ConverterParameter=Color}" />
            <sdk:DataGridTextColumn Binding="{Binding Converter={StaticResource MyConverter}, ConverterParameter=Name}" />
        </sdk:DataGrid.Columns>
    </sdk:DataGrid>

私のコード ビハインドは、単純なデータ バインディングに他なりません

        var products = Product.GetProducts(200);
        grid.ItemsSource = products;

私のコンバーターは

public class Converter:IValueConverter {

    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        if (value != null)
        {
            Product p = value as Product;
            switch (parameter as string)
            {
                case "Name":
                    if (p.Color == "Red")
                        return "";
                    else
                        return p.Name;
                case "Color":
                    return p.Color;
            }
        }
        return null;
    }

    public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        throw new NotImplementedException();
    }
}

** ここでの秘訣はバインディングです。行全体にバインドし、列名をパラメーターとして渡します。このようにして、列が生成されても、値コンバーターが毎回呼び出され、それにロジックを適用できます。

于 2013-01-24T21:09:33.563 に答える