我有一个datagrid,其itemssource通过MVVM绑定到模型。 数据由存储过程返回,对于特定行,例如对于具有代码“A”的行,我希望仅在某些列中显示数据,其余列应显示空字符串。 如何为此创建转换器?
答案 0 :(得分:1)
有几种方法可以做到这一点。
第一个简单的方法是按摩模型中的数据,以便您拥有正确的数据绑定。
另一种方法是在模型上。这是你如何做到的,假设你有类产品,它有名称和颜色。如果颜色为红色,则不想显示名称。所以我的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();
}
}
**这里的技巧是绑定,我绑定到整行并传递列名作为参数。这样,甚至列生成,每次都调用值转换器,你可以将逻辑应用于它