XAML WinUI 3 ListView中的选定项使用CommandParameter发送

x6h2sr28  于 2023-05-04  发布在  其他
关注(0)|答案(1)|浏览(176)

我有一个WinUI 3项目与Template Studio脚手架。具有多重选择模式的ListView。我使用MVVM,因此通过命令绑定到视图模型。当我改变列表中的选择时,程序会输入我的方法,这很好。但是我的参数是null。
当我更改列表中的选择以将元素发送到视图模型中的方法时,我该如何操作?CommandParameter="{Binding}"可能是问题所在。
MyPage.xaml

<ListView
    SelectionMode="Multiple"
    ItemsSource="{x:Bind ViewModel.ValidationFlagsList, Mode=OneTime}"
    SelectedValuePath="Key"
    DisplayMemberPath="Value">
    <interactivity:Interaction.Behaviors>
        <core:EventTriggerBehavior EventName="SelectionChanged">
            <core:InvokeCommandAction Command="{x:Bind ViewModel.FlagCheckBoxChangedCommand}" CommandParameter="{Binding}" /> 
        </core:EventTriggerBehavior>
    </interactivity:Interaction.Behaviors>
</ListView>

MyViewModel.cs

public IEnumerable<KeyValuePair<string, string>> ValidationFlagsList => EnumExtensions.GetAllValuesAndDescriptions<ValidationFlag>();

public ICommand FlagCheckBoxChangedCommand { get; }

ctor() 
{
    FlagCheckBoxChangedCommand = new RelayCommand<object>(FlagCheckBox_Changed);
}

private void FlagCheckBox_Changed(object validationFlag)
{
    // Problem: method is called, but parameter is null
}
gorkyyrv

gorkyyrv1#

您只需要删除CommandParameterSelectionChangedEventArgs将被传递给命令。

<ListView
    DisplayMemberPath="Value"
    ItemsSource="{x:Bind ViewModel.ValidationFlagsList, Mode=OneTime}"
    SelectedValuePath="Key"
    SelectionMode="Multiple">
    <interactivity:Interaction.Behaviors>
        <core:EventTriggerBehavior EventName="SelectionChanged">
            <core:InvokeCommandAction Command="{x:Bind ViewModel.FlagCheckBoxChangedCommand}" />
        </core:EventTriggerBehavior>
    </interactivity:Interaction.Behaviors>
</ListView>

然后在SelectionChangedEventArgs中,您将得到AddedItemsRemovedItems
顺便说一句,ListView一个SelectedItems属性,但它只是一个普通属性,而不是DependencyProperty,所以不幸的是,你不能在绑定中使用它。这里有一个workaround如果你感兴趣。

相关问题