2013-01-23 36 views
0

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

回答

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; 

我的转换器将具有

公共类转换器:的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(); 
    } 
} 

**在这里的技巧是绑定的,我结合全行通过列名作为parameter.This方式,即使列生成,正值转换器被称为每次和你可以申请你的逻辑。

+0

谢谢,我认为这是一个干净的方式去做 – xaria

+0

很高兴知道这一点。 – Nair