2011-11-25 78 views
1

我有一個菜單按鈕,單擊時會打開一個窗口。當發生什麼事情時更改控件屬性 - wpf xaml

我想在點擊時更改它的顏色,並在窗口關閉時恢復。

我以爲使用觸發器來改變它被點擊時的顏色,但我怎麼知道當窗戶關閉以改變顏色回來?

我需要它在MVVM方式,所以我不喜歡用後面

回答

2

與視圖模型並行的模式之一是事件聚合器。基本的要點是你創建一個消息總線,允許感興趣的對象訂閱其他對象可能觸發的特定事件,而不需要兩者之間的直接耦合。

您的主視圖模型可能會訂閱WindowClosed事件(它提供了一個用於確定哪個特定窗口已關閉的標識符)。當你的對話框關閉時,其視圖模型將負責觸發事件。

當您的視圖模型接收到事件時,它將更新該屬性,即您的菜單項的觸發器被綁定到。

0

代碼你可以使用一個切換按鈕,以及綁定到一些布爾維持的狀態窗口是否打開的財產器isChecked /關閉。

希望幫助

+0

我怎麼知道如果窗口關閉更新布爾屬性,如果我使用mvvm – david

0

您可以訂閱你的窗口的關閉事件,在該事件中,你可以設置你的任何布爾屬性這樣的 -

private void Border_MouseEnter(object sender, MouseEventArgs e) 
{ 
    Window w = new Window(); 
    w.Closed += new EventHandler(w_Closed); 
} 

void w_Closed(object sender, EventArgs e) 
{ 
    // Set your property here to true 
} 

簡單地說,你可以與物業玩在您的Trigger中更改菜單項的顏色。

+0

坦克的答案,但我搜索xaml/mvvm的方式。我更新了這個問題 – david

1

如果你使用mvvm,那麼你希望使用IWindowService來打開你的窗口。如果你這樣做,你的viewmodel知道服務/窗口什麼時候關閉,你可以使用布爾值綁定到你的觸發器。

1

我假設你正在實例化,並從ViewModel中綁定到按鈕的Command屬性的第二個窗口。這通常是MVVM中如何處理這種情況。這使您可以在ViewModel中創建另一個屬性,查詢該窗口是否打開。

private Window _secondWindow = null; 
public bool SecondWindowIsOpen 
{ 
    get { return _secondWindow != null; } 
} 

然後在您的XAML中,您可以將按鈕的BackgroundColor綁定到此屬性並使用觸發器來確定顏色。

<Window.Resources> 
    <Style x:Key="WindowIsOpenButtonStyle" TargetType="{x:Type Button}"> 
    <Style.Triggers> 
     <DataTrigger Binding="{Binding SecondWindowIsOpen}" Value="True"> 
     <Setter Property="Background" Value="Green" />      
     </DataTrigger> 
    </Style.Triggers> 
    </Style> 
</Window.Resources> 

<Grid> 
    <Button Background="Yellow" Command="{Binding OpenSecondWindow}" Style="{StaticResource WindowIsOpenButtonStyle}" /> 
</Grid> 

現在,當窗口打開按鈕的背景顏色將變爲黃色,而當它被再次關閉將恢復到它原來的顏色。

相關問題