我正在尝试将窗口Closed
事件重定向到ViewModel,但缺少正确使用AttachedProperties的经验。WPF AttachedProperty关闭窗口并在ViewModel中对其执行操作
持有的AttachedProperty
public class WindowClosedBehavior
{
public static readonly DependencyProperty ClosedProperty = DependencyProperty.RegisterAttached(
"Closed",
typeof (ICommand),
typeof (WindowClosedBehavior),
new UIPropertyMetadata(ClosedChanged));
private static void ClosedChanged(
DependencyObject target,
DependencyPropertyChangedEventArgs e)
{
var window = target as Window;
if (window != null)
{
// ??
}
}
public static void SetClosed(Window target, ICommand value)
{
target.SetValue(ClosedProperty, value);
}
}
我如何能实现的行为,这样它会关闭该窗口,并触发RelayCommand
类?
的(剥离)视图模型:
public RelayCommand WindowClosedCommand { get; private set; }
public MainCommandsViewModel()
{
WindowClosedCommand = new RelayCommand(WindowClosedCommandOnExecuted, WindowClosedCommandOnCanExecute);
}
MainWindow.xaml
<Window x:Class="TvShowManager.UserInterface.Views.MainWindow"
<!-- left out irrelevant parts -->
xmlns:closeBehaviors="clr-namespace:TvShowManager.UserInterface.CloseBehaviors"
closeBehaviors:WindowClosedBehavior.Closed="{Binding WindowCloseCommand}" >
我简单地结合一个RelayCommand
(WindowCloseCommand)到附加属性。
我试着调试通过这个来获得更好的理解,希望找出如何进行,但没有断点在保持我的附加属性的类被击中。如果有人能解释为什么我的代码在WindowClosedBehavior
从未得到执行,我也非常感谢那里的建议。
我希望我很清楚自己想要达到的目标,并且有人可以帮助我。
非常感谢
只是好奇:为什么不直接绑定到WindowCloseCommand并获得所需的结果? – WAQ 2014-10-05 12:13:10
@WQad,你建议绑定哪个属性的命令? – bas 2014-10-05 12:47:44