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