WPF 小技巧
在使用mvvm模式开发时,对于Command的绑定是一件很伤脑筋的事情,尽管有强大的Blend类库支持:
xmlns:Custom="http://www.galasoft.ch/mvvmlight"
xmlns:i="http://schemas.microsoft.com/expression/2010/interactivity"
xmlns:ei="http://schemas.microsoft.com/expression/2010/interactions"
<i:Interaction.Triggers>
<i:EventTrigger EventName="xxx">
<Custom:EventToCommand Command="{Binding xxxCommand, Mode=OneWay}"/>
</i:EventTrigger>
</i:Interaction.Triggers>
有时候我们会为“EventName”伤透脑筋:
<TabControl>
<TabItem >
xxx
</TabItem>
<TabItem >
xxx
</TabItem>
</TabControl>
我希望在选中第二个TabItem的时候做一些操作,例如加载数据,反之则清除数据,释放内存。
有了Blend,我们很愉快的空降了一个EventToCommand,然后选择EventName——哎~马!根本木有啥“选中”/“不选中”事件!好忧伤~~
这时候“非天秤座”的小伙伴肯定就果断放弃mvvm模式,写后台代码去了,本文完!
哎,哎,哎,别打脸,别……
我说,我说还不行吗!
<TabItem >
<TabItem.Header>
<Grid>
<CheckBox Visibility="Collapsed" IsChecked="{Binding IsSelected, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type TabItem}}}" >
<i:Interaction.Triggers>
<i:EventTrigger EventName="Checked">
<Custom:EventToCommand Command="{Binding xxxCommand, Mode=OneWay}"/>
</i:EventTrigger>
<i:EventTrigger EventName="Unchecked">
<Custom:EventToCommand Command="{Binding xxxCommand}"/>
</i:EventTrigger>
</i:Interaction.Triggers>
</CheckBox>
<TextBlock Text="设置" FontSize="32" Padding="20,5" />
</Grid>
</TabItem.Header>
<!--省略-->
</TabItem>
重点在这里:IsChecked="{Binding IsSelected, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type TabItem}},Mode=TwoWay}
TabItem虽然没有我们想要的事件,但是有个IsSelected属性,所以我们可以借助CheckBox来转换出我们想要的事件。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· 展开说说关于C#中ORM框架的用法!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?