我有一个xaml窗口,在窗口的StateChanged事件中,我必须执行一段代码。我必须遵循MVVM。我将StateChanged属性绑定到ICommand?它不起作用。
<Window
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
x:Class="DummyApp"
x:Name="Window"
Title="Dummy App"
Width="{Binding WindowWidth,Mode=OneWayToSource}" Height="{Binding WindowHeight}" ResizeMode="CanMinimize" Icon="Logo.png" SizeToContent="WidthAndHeight" WindowStartupLocation="CenterScreen" WindowState="{Binding CurrentWindowState, Mode=TwoWay}"
ShowInTaskbar="{Binding ShowInTaskBar, Mode=TwoWay}" StateChanged="{Binding IsMinimized}">
这是我的viewmodel。
public ICommand IsMinimized
{
get
{
if (_IsMinimized == null)
{
_IsMinimized = new RelayCommand(param => this.OnMinimized(), null);
}
return _IsMinimized;
}
}
private void OnMinimized()
{
//do something here
}
还有其他方法吗?
答案 0 :(得分:1)
是的,您可以将事件绑定到模型,但需要帮助。 您需要使用System.Windows.Interactivity Namespace中的函数并包含MVVM Light(可能有其他MVVM库具有该功能,但我使用MVVM Light)。
在窗口中包含以下命名空间
xmlns:i="clr-namespace:System.Windows.Interactivity;assembly=System.Windows.Interactivity"
xmlns:cmd="clr-namespace:GalaSoft.MvvmLight.Command;assembly=GalaSoft.MvvmLight.Extras"
并绑定您的活动,例如
<i:Interaction.Triggers>
<i:EventTrigger EventName="StateChanged">
<cmd:EventToCommand Command="{Binding StateChangedCommand}" PassEventArgsToCommand="True" />
</i:EventTrigger>
</i:Interaction.Triggers>
HTH
答案 1 :(得分:1)
感谢您的帮助。但我最终将WindowState绑定到属性并在那里处理代码。
public WindowState CurrentWindowState
{
get { return _currentWindowState; }
set
{
_currentWindowState = value;
if (_currentWindowState == WindowState.Minimized) //any other clause here
{
//do something here
}
NotifyPropertyChanged("CurrentWindowState");
}
}