我正在嘗試將窗口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