Silverlight 4数据网格行转换器

时间:2013-01-23 02:15:24

标签: datagrid silverlight-4.0

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

1 个答案:

答案 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();
    }
}

**这里的技巧是绑定,我绑定到整行并传递列名作为参数。这样,​​甚至列生成,每次都调用值转换器,你可以将逻辑应用于它