我有一个数据网格,它的 itemssource 通过使用 MVVM 绑定到模型。数据由存储过程返回,对于特定行,例如代码为“A”的行,我希望仅在某些列中显示数据,其余列应显示空字符串。如何为此创建转换器?
问问题
326 次
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;
我的转换器将有
公共类转换器: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 回答