0

我有一个数据网格,它的 itemssource 通过使用 MVVM 绑定到模型。数据由存储过程返回,对于特定行,例如代码为“A”的行,我希望仅在某些列中显示数据,其余列应显示空字符串。如何为此创建转换器?

4

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;

我的转换器将有

公共类转换器: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 回答