まず、私はあなたに私のクラスを表示してみましょう:それは親とチャイルズのリストを持つことができるようDataGridRow.CellStyleのDataGrid ItemsSourceオブジェクトのプロパティにアクセスする方法?すべての
public class Model
{
public Model Parent {get; set;}
public ObservableCollection<Model> Childs {get; set;}
public ObservableCollection<Partner> Partners {get; set;}
public bool IsTopElement => Parent == null;
}
public class Partner
{
public bool IsActive {get; set;}
public string PartnerRole {get; set;}
public bool IsCustomer => PartnerRole == "Customer"
}
あなたが見ることができるように、Model
は階層です。私は、DataContextがModel
のインスタンスに設定されているUserControlを持っています。このUserControlには、ItemsSourceがPartners
にバインドされているDataGridがあります。このDataGridでは、オブジェクトといくつかのDataGridTextColumnsのIsActive
プロパティにバインドされたDataGridCheckBoxColumnがあります。 私が達成したいのは、現在のModel
オブジェクトがトップ要素ではなく(親を持たない)、IsCustomer == True
のPartner
エントリに属するすべてのIsActive
Checkboxセルが無効になることです。
私は、次のXAMLコードを試してみました:
<UserControl DataContext="{Binding Model}">
<DataGrid ItemsSource="{Binding Partners}"
AutoGenerateColumns="False"
CanUserResizeRows="False"
CanUserAddRows="False"
CanUserDeleteRows="False"
RowDetailsVisibilityMode="VisibleWhenSelected">
<DataGrid.Columns>
<DataGridCheckBoxColumn Binding="{Binding IsActive}">
<DataGridCheckBoxColumn.CellStyle>
<Style TargetType="{x:Type DataGridCell}">
<Style.Triggers>
<MultiDataTrigger>
<MultiDataTrigger.Conditions>
<Condition Binding="{Binding Model.IsTopElement}" Value="False"/>
<Condition Binding="{Binding ???}"/> <!-- I'd have expected Binding="{Binding IsCustomer}" Value="True" to work, but it doesn't-->
</MultiDataTrigger.Conditions>
<Setter Property="IsEnabled" Value="False"/>
</MultiDataTrigger>
</Style.Triggers>
</Style>
</DataGridCheckBoxColumn.CellStyle>
</DataGridCheckBoxColumn>
</DataGrid.Columns>
</DataGrid>
</UserControl>
私が今直面してる問題は、私はMultiDataTriggerの第二の条件でDataGrid内Partner
オブジェクトのプロパティIsCustomer
へのアクセスを持っていないということです。どうすればこのプロパティにアクセスできますか?また、私は、DataGridののItemsSourceがPartners
にバインドされているが、どうやら私は私にはかなり混乱している、持っているので、最初の条件でModel
のIsTopElement
プロパティにアクセスすることを期待していませんでした。
ご協力いただければ幸いです。詳しい情報が必要な場合はお知らせください。
ありがとう:これを試してみてください!しかし、私はあなたが何か誤解したと思います。これは私に問題を与えている 'Model'の' IsTopElement'プロパティではなく、私がアクセスできないDataGridRowの 'Partner'オブジェクトの' IsCustomer'プロパティです。私はあなたのアプローチを試みた。残念ながら、 ' 'は第2の条件では機能しませんでした。 VSは 'DataContext.IsCustomer'を解決できないと言っています。私はアプリケーションを実行することができますが、目的の動作は達成されません。 –
どのような不動産が問題を引き起こしているか、どのように知っていますか?パートナーはModelプロパティを持たないので、最初のバインディングはなぜ機能しますか?あなたはここに全体像を与えていません...パートナークラスはIsCustomerプロパティを持っているので、私があなたに示したように、あなたはこのクラスに直接バインドすることができます。 – mm8