WINUI——Behavior(行为)小结

前言

在使用MVVM进行WINUI或WPF开发时,Command在某些时候并不能满足逻辑与UI分离的要求。这时肯定就需要其它技术的支持,Behavior就是一种。在WPF中是有Behavior直接支持的,转到WINUI后,相对有一些麻烦,于是在此记录之,以备忘。

开发环境

WIN11

VS2022

Nuget包:Microsoft.Xaml.Behaviors.WinUI.Managed

如何使用Behavior?

1. 首先安装Microsoft.Xaml.Behaviors.WinUI.Managed

当前(2024/6/6)的最新版本为2.0.9。

2. 在需要使用的Page引用InteractivityInteractions

xmlns:Interactivity="using:Microsoft.Xaml.Interactivity"

xmlns:Interactions="using:Microsoft.Xaml.Interactions.Core"

3. 在需要的控件添加相应的Behavior

以下以InvokeCommandAction (即是调用VM中的Command)为示例,更多详细操作可参见Github相应文档,链接为:InvokeCommandAction · microsoft/XamlBehaviors Wiki · GitHub

XML 复制代码
<Button x:Name="button1">
    <Interactivity:Interaction.Behaviors>
        <Interactions:EventTriggerBehavior EventName="Click" SourceObject="{Binding ElementName=button1}">
            <Interactions:InvokeCommandAction Command="{Binding UpdateCountCommand}"/>
        </Interactions:EventTriggerBehavior>
    </Interactivity:Interaction.Behaviors>
</Button>

若调用的Command有参数时,参数添加示例如下:

XML 复制代码
<Interactions:InvokeCommandAction Command="{x:Bind ViewModel.UserNameChangedCommand}" 
CommandParameter="{Binding ElementName=UserNameTextBox, Path=Text}" />

Behavior添加注意事项:

若有参数时,请一定要在控件的Content内添加Behavior,不可将它的Behavior添加到集中管理的Behaviors中。

如将UserNameTextBox的Behavior添加到下述的Behaviors,那么它的的参数CommandParameter可能就会获取不到。

XML 复制代码
 <Interactivity:Interaction.Behaviors>
        <Interactions:EventTriggerBehavior EventName="TextChanged" SourceObject="{Binding ElementName=UserNameTextBox}">
            <Interactions:InvokeCommandAction Command="{Binding UserNameChangedCommand}" CommandParameter="{Binding ElementName=UserNameTextBox, Path=Text}" />
        </Interactions:EventTriggerBehavior>
        <Interactions:EventTriggerBehavior EventName="Load" SourceObject="{Binding ElementName=TestPage}">
            <Interactions:InvokeCommandAction Command="{Binding PageLoadCommand}"/>
        </Interactions:EventTriggerBehavior>
    </Interactivity:Interaction.Behaviors>

原因可能是集中管理的Behaviors在所在层的可视化树上找不到UserNameTextBox这个SourceObject,于是就不能正确获取到它的文本。此后续弄清原因再做更新......

参考链接:

GitHub - microsoft/XamlBehaviors: This is the official home for UWP XAML Behaviors on GitHub.

以上链接为XamlBehaviors的仓库地址,及引入Microsoft.Xaml.Behaviors.WinUI.Managed的源码及更加详尽的介绍。

相关推荐
周杰伦fans13 小时前
C# 中 Entity Framework (EF) 和 EF Core 里的 `AsNoTracking` 方法
开发语言·c#
她说彩礼65万13 小时前
C#设计模式 单例模式实现方式
单例模式·设计模式·c#
Aevget16 小时前
界面控件DevExpress WPF v25.1新版亮点:AI功能的全面升级
c#·.net·wpf·界面控件·devexpress·ui开发
Archy_Wang_117 小时前
Hangfire 入门与实战:在 .NET Core 中实现可靠后台任务处理
c#·.netcore
爱编程的鱼19 小时前
想学编程作为今后的工作技能,学哪种语言适用性更强?
开发语言·算法·c#·bug
清风与日月21 小时前
c#事件委托示例
开发语言·c#
用户37215742613521 小时前
C# 实现在 Excel 中高效生成和操作表格
c#
csdn_aspnet21 小时前
C# 金字塔体积计算程序(Program for volume of Pyramid)
c#
William_cl1 天前
C# ASP.NET MVC Model 分类:数据传输对象(DTO)—— 跨层传数的 “精简快递“
c#·asp.net·mvc
zwjapple1 天前
Kafka 从入门到精通完整指南
c#·linq