如何绑定到WPF DataGrid行类实例而不是它的属性?

时间:2016-10-05 11:52:39

标签: wpf xaml datagrid wpfdatagrid

我需要为一行的DataGrid列确定一个图标,并且我想让转换器做到这一点。转换器只会得到整行,然后由多个属性决定哪些xaml-geometry返回

 <DataGrid CanUserAddRows="False" CanUserResizeColumns="True" CanUserSortColumns="True" IsReadOnly="True" 
               ItemsSource="{Binding SelectedObjectsMmsDataItems}">
        <DataGrid.Resources>
            <DataTemplate x:Key="TypeImageColumnTemplate" >
                <Label Style="{StaticResource DataGridIconColumnLabel}">
                    <Path Data="{Binding???, Converter={StaticResource MmsDataToPathConverter}}" />
                </Label>
            </DataTemplate>
           <DataGrid.Columns>
           <DataGridTemplateColumn Header="{StaticResource ResourceKey=StrIcon}" CellTemplate="{StaticResource TypeImageColumnTemplate}" Width="Auto"/>

怎么做?

3 个答案:

答案 0 :(得分:1)

这将为您提供DataGridRow

<Path Data="{Binding ., RelativeSource={RelativeSource AncestorType=DataGridRow}, Converter={StaticResource MmsDataToPathConverter}}" />

这将为您提供该行提供的Item(例如;员工)。

<Path Data="{Binding DataContext, RelativeSource={RelativeSource AncestorType=DataGridRow}, Converter={StaticResource MmsDataToPathConverter}}" />

答案 1 :(得分:0)

如果绑定的结构是IEnumerable或Collection的结构,例如类结构,那么您应该可以通过公开自己的自定义属性并从那里对其进行所有操作来完成。像

这样的东西
public class YourClass
{
   public YourClass()
   {...}

   public int SomeField { get; set;}
   public string OtherField {get; set;}
   ...

   public whateverDataType YourNewPropertyToBindTo
   {
      get { if( SomeField == 1 && OtherField == "Test" )
               return "X";

            if( SomeField == 2  && OtherFIeld == "SomethingElse"
               return "Y";

            return "Z"; // as a default return value. }
   }
}

然后,您可以直接从记录/类结构源访问所有属性和正确的数据类型。希望这个选项有所帮助。

答案 2 :(得分:0)

这是通过以下XAML完成的。当没有其他任何东西只有Binding一词时,应该在转换器之前省略逗号。

 <Path Data="{Binding Converter={StaticResource MmsDataToPathConverter}}"