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