5

にハイパーリンクを挿入し、MVVMパターンを使用して動作をDataGrid実装するためのメソッドを見つけようとしています。RequestNavigate

私はこれまで多くの解決策を試しましたが、どれもうまくいきません。私を手伝ってくれますか?

これは私のxamlコードです:

<dgWPFCtrl:ExtDataGridTemplateColumn  Header="Link to XXX"  Width="*">
                    <dgWPFCtrl:ExtDataGridTemplateColumn.CellTemplate>
                        <DataTemplate>
                            <TextBlock >
                                <Hyperlink NavigateUri="{Binding Path=ID_HTTP_LINK}"
                                           >
                                    <TextBlock Text="{Binding Path=ID_HTTP_LINK}"/>
                                    <i:Interaction.Triggers>
                                        <i:EventTrigger EventName="RequestNavigate">
                                            <WPFCtrl:EventToCommand 
                                                PassEventArgsToCommand="True"
                                                Command="{Binding Path=OpenLinkCommand}" />
                                        </i:EventTrigger>
                                    </i:Interaction.Triggers>
                                </Hyperlink>
                            </TextBlock>
                        </DataTemplate>
                    </dgWPFCtrl:ExtDataGridTemplateColumn.CellTemplate>
                </dgWPFCtrl:ExtDataGridTemplateColumn>

相対的なICommand発展に続いて:

//Command for open link
RelayCommand _openLinkCommand;
public ICommand OpenLinkCommand
{
    get
    {
        if (_openLinkCommand == null)
            _openLinkCommand = new RelayCommand(param => 
            {
                //Command Body ...
            });
        return _openLinkCommand;
    }
}

どこが間違っているの?意外にも、ICommandは呼ばれることさえありません!

他の種類のイベント(など)も使用しようとしましMouseEnterたが、何も変わりませんでした。

貢献してくれてありがとう、

デビ

4

1 に答える 1

12

ハイパーリンクのDataContextは、ViewModelではなく、DataGridRowによって表されるオブジェクトのデータコンテキストです。したがって、そのViewModel(RelativeSource AncestorTypeまたはElementNameのいずれか)に到達するには、バインディングメソッドを使用する必要があります。

ElementName(DataGridの名前が「myDataGrid」であると想定)

Command="{Binding ElementName=myDataGrid, Path=DataContext.OpenLinkCommand}"

RelativeSource

Command="{Binding RelativeSource={RelativeSource AncestorType={x:Type DataGrid}}, Path=DataContext.OpenLinkCommand}"
于 2013-03-04T15:00:54.543 に答える