我有一个菜单按钮,单击时会打开一个窗口。当发生什么事情时更改控件属性 - 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