2

私の問題:

  • DataGridコマンドにバインドされたボタン付きのXceed列があります(その部分は機能します)
  • 現在の特定の値に応じて、ボタンを有効/無効にしたいと考えていますDataRow
  • これまでのところ、コマンドのバインド作業または使用するものにDataTrigger応じてのいずれかを取得できますが、DataContext両方を同時に取得することはできません。

私は次のコードで立ち往生しています:

<xcdg:Column FieldName="OpenInPiWebIdentifier"
             Title="PiWeb Report"
             VisiblePosition="6">
    <xcdg:Column.CellContentTemplate>
        <DataTemplate>
            <Button DataContext="{Binding RelativeSource={RelativeSource Self}, Path=(xcdg:DataGridControl.ParentDataGridControl).DataContext}"
                    Content="Open PiWeb"
                    Command="{Binding OpenPiWebCommand}"
                    CommandParameter="{Binding DataContext.ResultData/PiWebReport, Mode=OneWay, RelativeSource={RelativeSource Self}}">
                <Button.Style>
                    <Style TargetType="Button">
                        <Style.Triggers>
                            <DataTrigger Binding="{Binding PiWebReport}"
                                         Value="{x:Null}">
                                <Setter Property="IsEnabled"
                                        Value="False" />
                            </DataTrigger>
                        </Style.Triggers>
                    </Style>
                </Button.Style>
            </Button>
        </DataTemplate>
    </xcdg:Column.CellContentTemplate>
</xcdg:Column>

そして、コマンドのビュー モデルの実装:

public ICommand OpenPiWebCommand
{
    get
    {
        return _OpenPiWebCommand;
    }

    set
    {
        if (value != _OpenPiWebCommand)
        {
            _OpenPiWebCommand = value;
            OnPropertyChanged("OpenPiWebCommand");
        }
    }
}

private ICommand _OpenPiWebCommand;

コンストラクターで、コマンドを初期化します。

OpenPiWebCommand = new RelayCommand(new Action<object>(OpenPiWeb));

プロパティPiWebReportはクラスに属しResultDataV1ます。すべてのデータは、列/行としてResultData = new ObservableCollection<ResultDataV1>(); 表示されるこのプロパティに入れられます。DataGridしたがって、使用するコンテキストに応じて、プロパティ値PiWebReportまたはコマンドのいずれかにアクセスできるようになりましたが、同時に両方にアクセスすることはできません。

データクラス:

public class ResultDataV1
{
    public ResultDataV1(long dataId, DateTime dateTime, DateTime? endDateTime, string partId, string scanId, bool measurementNotVolumejoin, string piWebReport, FileInfo volumeFileInfo, FileInfo volumeVglFileInfo, DirectoryInfo volumeDirectoryInfo, string inspectionPlanName, string paletteName, AutomationStateEnum? automationState);

    public AutomationStateEnum? AutomationState { get; }
    public long DataId { get; }
    public DateTime DateTime { get; }
    public DateTime? EndDateTime { get; }
    public string InspectionPlanName { get; }
    public bool MeasurementNotVolumejoin { get; }
    public string PaletteName { get; }
    public string PartId { get; }
    public string PiWebReport { get; }
    public string ScanId { get; }
    public List<SubResultDataV1> SubResults { get; }
    public DirectoryInfo VolumeDirectoryInfo { get; }
    public FileInfo VolumeFileInfo { get; }
    public FileInfo VolumeVglFileInfo { get; }
}
4

1 に答える 1