在我的項目中,我有一個Units
的列表,它被用作DataGrid的數據源。 Units
類型有兩種類型的子類,AUnits
和BUnits
。列表中的每個Unit
可以是AUnit
或BUnit
。我的問題是,當我試圖綁定到一個特定於某個子類單元類型的屬性時,XAML沒有看到它,我只是回到0。通常情況下,如果這是在C#中完成的,我只需將其轉換並訪問該屬性,但在此時我無法在我的代碼中執行此操作。綁定正在C#中創建,如下所示:如何在XAML中投入以訪問子類屬性
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
類,它擁有Unit
和UnitStatus
的ObservableCollection
。我需要訪問UnitInfo
的Unit
中的MaxDepthRelativeToEntry
。但我需要能夠看到Unit
作爲AUnit
我忘了提及,有周圍的包裝類我單位,並且我的ItemsSource在XAML中是這樣設置的:'ItemsSource =「{Binding UnitStatusCollection,Mode = TwoWay}」'。如果UnitInfo是包裝類,我是否應該能夠執行如下操作:'dgtc.Binding = new Binding(「UnitInfo.AUnit.MaxDepthRelativeToEntry」)'?我也會更新這個問題 – KSF
@KSF我的答案不會改變,儘管你必須在綁定路徑中添加一個屬性。例如,如果你綁定了一個'UnitInfo'對象集合,並且每個對象都有一個'Unit'屬性,可以是'AUnit'或'BUnit'類型,那麼你的綁定就是'{綁定單元。 MaxDepthRelativeToEntry}'或'新的綁定(「Unit.MaxDepthRelativeToEntry」)'。字符串中的文本應該匹配任何普通的c#看起來像......如果你可以寫'UnitStatusCollection [0] .Unit.MaxDepthRelativeToEntry',那麼你的綁定應該是'Unit.MaxDepthRelativeToEntry' – Rachel
@KSF如果你還在不清楚,請編輯您的問題以包含您的對象模型的結構。這就是定義綁定路徑應該是什麼的。 – Rachel