我有一個菜單按鈕,單擊時會打開一個窗口。當發生什麼事情時更改控件屬性 - wpf xaml
我想在點擊時更改它的顏色,並在窗口關閉時恢復。
我以爲使用觸發器來改變它被點擊時的顏色,但我怎麼知道當窗戶關閉以改變顏色回來?
我需要它在MVVM方式,所以我不喜歡用後面
我有一個菜單按鈕,單擊時會打開一個窗口。當發生什麼事情時更改控件屬性 - wpf xaml
我想在點擊時更改它的顏色,並在窗口關閉時恢復。
我以爲使用觸發器來改變它被點擊時的顏色,但我怎麼知道當窗戶關閉以改變顏色回來?
我需要它在MVVM方式,所以我不喜歡用後面
與視圖模型並行的模式之一是事件聚合器。基本的要點是你創建一個消息總線,允許感興趣的對象訂閱其他對象可能觸發的特定事件,而不需要兩者之間的直接耦合。
您的主視圖模型可能會訂閱WindowClosed事件(它提供了一個用於確定哪個特定窗口已關閉的標識符)。當你的對話框關閉時,其視圖模型將負責觸發事件。
當您的視圖模型接收到事件時,它將更新該屬性,即您的菜單項的觸發器被綁定到。
代碼你可以使用一個切換按鈕,以及綁定到一些布爾維持的狀態窗口是否打開的財產器isChecked /關閉。
希望幫助
您可以訂閱你的窗口的關閉事件,在該事件中,你可以設置你的任何布爾屬性這樣的 -
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
中更改菜單項的顏色。
坦克的答案,但我搜索xaml/mvvm的方式。我更新了這個問題 – david
如果你使用mvvm,那麼你希望使用IWindowService來打開你的窗口。如果你這樣做,你的viewmodel知道服務/窗口什麼時候關閉,你可以使用布爾值綁定到你的觸發器。
我假設你正在實例化,並從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>
現在,當窗口打開按鈕的背景顏色將變爲黃色,而當它被再次關閉將恢復到它原來的顏色。
我怎麼知道如果窗口關閉更新布爾屬性,如果我使用mvvm – david