2014-02-13 49 views
6

我有一個用戶控件,如下面我的主窗口:用戶控件怎麼知道當它是可見

<ctrls:Login Visibility="{Binding DataContext.Vis, 
          RelativeSource={RelativeSource Mode=FindAncestor, 
                  AncestorType=Window}}, 
          Converter={StaticResource BooelanToVisibilityConverter}"/> 

所以它有它的知名度勢必會在主窗口的視圖模型屬性可見。

我想知道的是,在UserControl的ViewModel內部,如何在可見性發生變化時拾取它?我想在可見時啓動一個計時器,並在隱藏時停止它。

回答

7

您可以在用戶控件掛鉤UIElement.IsVisibleChanged事件:

<ctrls:Login IsVisibleChanged="Control_VisibleChanged"/> 

後面的代碼:

private void Control_VisibleChanged(object sender, 
             DependencyPropertyChangedEventArgs e) 
{ 
    if ((bool)e.NewValue) 
    { 
     // Visible code here 
    } 
    else 
    { 
     // Collapse code here 
    } 
} 

如果你想開始Timer,我看不出有什麼問題,這樣做,從後面的代碼。

但是,但是,如果你仍然想,要在視圖模型被通知可以在用戶控件視圖模型創建ICommand並使用綁定到這個事件interaction triggers

<ctrls:Login> 
    <i:Interaction.Triggers> 
     <i:EventTrigger EventName="IsVisibleChanged"> 
      <i:InvokeCommandAction Command="{Binding VisibleChangedCommand}"/> 
     </i:EventTrigger> 
    </i:Interaction.Triggers> 
</ctrls:Login> 

您可以參考這篇文章here中案例交互觸發器對你而言是新事物。

+0

他希望在視圖模型中得到通知,而不是在控制的代碼隱藏 – Alberto

+1

這是完美的謝謝Rohit。 – Hank

+0

不客氣漢克..! –

相關問題