私のプロジェクトでは、DataGridのデータソースとして使用されているUnits
のリストがあります。 Units
タイプには、サブタイプがAUnits
とBUnits
の2種類があります。リスト内の各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は、AUnit
のサブクラスのプロパティであるため0になります。したがって、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を構築している/私はバインディングの設定など、私に利用可能なユニットのリストを持っていない/ etc。私はインスタンスからプロパティを取得し、それを返すことができません。誰かが、私ができれば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
はUnit
とUnitStatus
を保持しているUnitInfo
と呼ばれるクラスのObservableCollection
あるUnitStatusCollection
に設定されています。私は Unit
ののプロパティにアクセスする必要があります。あなたがUnit
オブジェクトのリストに結合されている場合でも、私はAUnit
私ItemsSourceは次のようにXAMLで設定されていることを確認してください: 'ItemsSource =" {Binding UnitStatusCollection、Mode = TwoWay} "。 UnitInfoがラッパークラスであれば、 'dgtc.Binding = new Binding(" UnitInfo.AUnit.MaxDepthRelativeToEntry ")'のようなことができますか?私も同様に質問を更新します – KSF
@KSF私の答えは変わりませんが、バインディングパスにプロパティをもう1つ追加する必要があります。例えば、あなたが 'UnitInfo'オブジェクトの集合にバインドしていて、各オブジェクトが' AUnit'か 'BUnit'型のどちらかである' Unit'プロパティを持っていたなら、あなたのバインディングは '{Binding Unit ' MaxDepthRelativeToEntry} 'または'新しいバインディング( "Unit.MaxDepthRelativeToEntry") 'を返します。文字列のテキストは、通常のC#のように一致するはずです...もしあなたが 'UnitStatusCollection [0] .Unit.MaxDepthRelativeToEntry'と書くことができるなら、あなたのバインディングは' Unit.MaxDepthRelativeToEntry'でなければなりません – Rachel
@KSFもしあなたがまだ不明な点は、オブジェクトモデルの構造を含めるように質問を編集してください。これが、バインディングパスをどのようにすべきかを定義するものです。 – Rachel