【发布时间】:2016-11-10 02:46:52
【问题描述】:
在我的项目中,我有一个 Units 列表,它被用作 DataGrid 的数据源。 Units 类型有两种类型的子类,AUnits 和 BUnits。列表中的每个Unit 要么是AUnit,要么是BUnit。我的问题是当我尝试绑定到特定于子类单元类型之一的属性时,XAML 看不到它,我只是返回 0。通常,如果这是在 C# 中完成的,我只会强制转换它并访问该属性,但此时我无法在我的代码中执行此操作。绑定是在 C# 中创建的,如下所示:
dgtc.Header = Properties.Resources.MaxPressure;
dgtc.MinWidth = 25;
dgtc.Width = Properties.Settings.Default.MaxPressureColumnWidth;
dgtc.IsReadOnly = true;
dgtc.Binding = new Binding("Unit.MaxDepthRelativeToEntry")
{
Converter = new DistanceUnitsConverter()
};
其中 dgtc 是一个 DataGridTextColumn。 Unit.MaxDepthRelativeToEntry 为 0,因为它是 AUnit 的子类上的属性,因此 XAML 认为我正在尝试访问不存在的属性。
我已经阅读了this answer,到目前为止我已经尝试了以下一些语法:
dgtc.Binding = new Binding("AUnit.MaxDepthRelativeToEntry")
dgtc.Binding = new Binding("Unit(MyNameSpace:AUnit).MaxDepthRelativeToEntry")
dgtc.Binding = new Binding("Unit(MyNameSpace:AUnit.MaxDepthRelativeToEntry)")
并且无法使任何这些工作。我也尝试通过转换器执行此操作,但问题是,当我构建 DataGrid/设置绑定/等时,我没有可用的单元列表。所以我无法从实例中获取属性并将其返回。有谁知道我可以通过任何方式(最好是在 XAML 中)获取我绑定到的类型的子类类型的属性?
编辑:
我的 DataGrid 具有以下 XAML:
<DataGrid x:Name="JobListView"
AutoGenerateColumns="False"
ItemsSource="{Binding UnitStatusCollection, Mode=TwoWay}"
CanUserDeleteRows="False"
Style="{StaticResource JobGridViewStyle}"
SelectedItem="{Binding JobsListViewSelectedUnitInfo, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
Utility:DataGridColumnsBehavior.BindableColumns="{Binding DataGridColumns}"
ContextMenu="{StaticResource ListViewContextMenu}"
Margin="10,5,10,2"
Grid.Row="2"
SelectionMode="Single"
SelectionUnit="FullRow"
HorizontalAlignment="Stretch"
HorizontalContentAlignment="Stretch"
RowStyle="{StaticResource DataGridRowStyle}"
CellStyle="{StaticResource DataGridCellStyle}"
AlternationCount="2"
HorizontalScrollBarVisibility="Visible"
VerticalScrollBarVisibility="Visible"
CanUserResizeRows="False"
HorizontalGridLinesBrush="#d6d6d6"
VerticalGridLinesBrush="#d6d6d6"
Background="#EAEAEA"
>
ItemsSource 设置为UnitStatusCollection,这是一个名为UnitInfo 的类的ObservableCollection,该类包含Unit 和UnitStatus。我需要访问UnitInfo 的Unit 中的属性MaxDepthRelativeToEntry。但我需要能够将Unit 视为AUnit
【问题讨论】:
标签: c# wpf xaml data-binding