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来转换出我们想要的事件。

 

posted @   疯狂的懒羊羊  阅读(1180)  评论(0编辑  收藏  举报
编辑推荐:
· 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,谁才是开发者新宠?
点击右上角即可分享
微信分享提示