2013-01-23 104 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