WPF 小技巧

在使用mvvm模式開發時,對於Command的綁定是一件很傷腦筋的事情,儘管有強大的Blend類庫支持:express

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"mvvm

 <i:Interaction.Triggers>
      <i:EventTrigger EventName="xxx">
           <Custom:EventToCommand Command="{Binding xxxCommand, Mode=OneWay}"/>
      </i:EventTrigger>
</i:Interaction.Triggers>spa

有時候咱們會爲「EventName」傷透腦筋:code

 <TabControl>
            <TabItem >xml

     xxxblog

    </TabItem>事件

            <TabItem >內存

     xxx開發

    </TabItem>get

</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來轉換出咱們想要的事件。

相關文章
相關標籤/搜索