【发布时间】:2014-08-05 19:12:49
【问题描述】:
我有一个 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}">
这是我的视图模型。
public ICommand IsMinimized
{
get
{
if (_IsMinimized == null)
{
_IsMinimized = new RelayCommand(param => this.OnMinimized(), null);
}
return _IsMinimized;
}
}
private void OnMinimized()
{
//do something here
}
还有其他方法吗?
【问题讨论】:
-
我将
Window.StateChanged事件绑定到ICommand,但它不起作用?...真的吗?那是为什么?可能是因为ICommand不是事件? -
@RohitVats,您是如何设法将这个问题作为一个重复的没有接受答案的问题关闭的?我不认为我们能做到这一点。
-
好吧,这行不通。但是还有其他方法可以做到这一点吗?我确实找到了一种方法将 RoutedEvent 绑定到来自这里的命令 Binding RoutedEvent to Command 但是 StateChanged 不是 RoutedEvent?有没有其他方法可以做到这一点?
-
好吧,这行不通...为什么不呢?它对其他人有用吗?或者,只需在后面的代码和处理程序中处理
Window.StateChanged事件,只需执行您的ICommand:var viewModel = (SomeDataType)DataContext; viewModel.YourCommand.Execute(params); -
@Sheridan - 好的。我将重新打开这个问题,但大多数投票的答案肯定有效。不知道 OP 如何使用它。