Как передать параметр типа делегата команде WPF - PullRequest
0 голосов
/ 06 мая 2020

Добрый день! У меня есть следующий код представления (часть):

<dxg:TreeListControl x:Name="TlcPropertyGroups" ItemsSource="{Binding CatalogPropertyGroups}"  >
        <dxg:TreeListControl.Columns>
            <dxg:TreeListColumn FieldName="Name"  />
        </dxg:TreeListControl.Columns>
        <dxg:TreeListControl.View>
            <dxg:TreeListView x:Name="TlvPropertyGroups" ShowCheckboxes="True" AllowRecursiveNodeChecking="True"  ShowColumnHeaders="True" TreeDerivationMode="ChildNodesSelector" ChildNodesPath="CatalogPropertyGroupDetails" ShowIndicator="False">
                <dxg:TreeListView.HeaderTemplate>
                    <DataTemplate>
                        <Grid>
                            <Grid.ColumnDefinitions>
                                <ColumnDefinition Width="Auto"/>
                                <ColumnDefinition/>
                            </Grid.ColumnDefinitions>
                            <dxe:TextEdit EditMode="InplaceInactive" Text="Группы свойств"/>
                            <dxe:HyperlinkEdit Grid.Column="1" Text="Настроить" HorizontalAlignment="Right" Command="{Binding SettingCatalogPropertyGroupsCommand}"  DataContext="{Binding DataContext, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type dx:DXWindow}}}"/>
                        </Grid>
                    </DataTemplate>
                </dxg:TreeListView.HeaderTemplate>
                <i:Interaction.Triggers>
                    <i:EventTrigger EventName="Loaded">
                        <i:InvokeCommandAction Command="{Binding CmdTreeListViewLoaded}" />
                    </i:EventTrigger>
                </i:Interaction.Triggers>
            </dxg:TreeListView>
        </dxg:TreeListControl.View>
    </dxg:TreeListControl>

Есть следующая команда:

 private RelayCommand cmdTreeListViewLoaded;

    public RelayCommand CmdTreeListViewLoaded
    {
        get { return cmdTreeListViewLoaded ?? (cmdTreeListViewLoaded = new RelayCommand(obj =>
        {

            //some code


        })); }
    }

Вопрос: как передать делегата в качестве параметра команде (чтобы скрыть некоторые логи уровня презентации c)? PS: например, делегат может отображать простой MessageBox.

Ответы [ 2 ]

0 голосов
/ 06 мая 2020

Вот решение:

Часть кода представления:

 public static Action<string> ActionMethod { get; set; } = str =>
 {
        MessageBox.Show(str);
 };

Часть кода XAML:

 <i:Interaction.Triggers>
         <i:EventTrigger EventName="Loaded">
             <i:InvokeCommandAction Command="{Binding CmdTreeListViewLoaded}" CommandParameter="{x:Static tabPanels:PropertyGroupsPanel.ActionMethod}" />
         </i:EventTrigger>
  </i:Interaction.Triggers>

Часть кода ViewModel:

 private RelayCommand<Action<string>> cmdTreeListViewLoaded;

    public RelayCommand<Action<string>> CmdTreeListViewLoaded
    {
        get
        {
            return cmdTreeListViewLoaded ?? (cmdTreeListViewLoaded =
                       new RelayCommand<Action<string>>(obj =>
                       {
                           obj.Invoke("Тест!!!");
                       }));
        }
    }
0 голосов
/ 06 мая 2020

Попробуйте это

<i:Interaction.Triggers>
                <i:EventTrigger EventName="SelectionChanged">

                     <i:InvokeCommandAction Command="{Binding CmdTreeListViewLoaded}"
                                           CommandParameter="{Binding Path=SelectedItem, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=TreeListView}}" />
                </i:EventTrigger>
    </i:Interaction.Triggers>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...