Я использую шаблон MVVM, поэтому моя модель представления ничего не знает о представлении, и представление отображается через DataTemplates.WPF привязка ICommand к событию (FrameworkElement.Unloaded)
Когда представление больше не отображается, я хочу сделать снимок экрана (с классом полезности). Поэтому я хочу привязать к FrameworkElement.Unloaded, и когда его ударит, сделайте снимок экрана usercontrol для использования в другом элементе управления, чтобы выбрать, к какому виду перейти.
Я прочитал эту статью, которая делает вид, как будто присоединенные свойства будут работать (я использую его на объекте UserControl) http://blog.functionalfun.net/2008/09/hooking-up-commands-to-events-in-wpf.html
Я получаю ошибку, что связывание может быть установлено только на DependencyObject или DependencyProperty. Я следовал его инструкциям должным образом. Любая идея, почему это не работает или как я могу привязываться к сценарию MVVM?
Невозможно ли привязать это событие или к событию в корневом узле xaml?
Вот Teh код (в дополнение к EventBehaviorFactory в приведенной выше ссылке)
public static class FrameworkElementBehavior
{
public static readonly DependencyProperty UnloadedCommandProperty = EventBehaviourFactory.CreateCommandExecutionEventBehaviour(FrameworkElement.UnloadedEvent, "UnloadedCommand", typeof(FrameworkElementBehavior));
public static void SetUnloadedCommand(DependencyObject o, ICommand value)
{
o.SetValue(UnloadedCommandProperty, value);
}
public static ICommand GetUnloadedCommand(DependencyObject o)
{
return o.GetValue(UnloadedCommandProperty) as ICommand;
}
}
<UserControl x:Class="WTF.BuxComp.Prism.Modules.Win.OrderEntryPos.Views.CustomerView"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:local="clr-namespace:WTF.BuxComp.Prism.Modules.Win.OrderEntryPos.Helpers"
mc:Ignorable="d"
d:DesignHeight="510" d:DesignWidth="716"
local:FrameworkElementBehavior.UnloadedCommand="{Binding UnloadedCommand}">
и точная ошибка
A «Связывание» не может быть установлен на свойство «SetUnloadedCommand» из тип «CustomerView». «Связывание» может быть установлено только на DependencyProperty a DependencyObject.
Для еще более универсальным решением, которое вы могли бы заменить «this.Data.OutOfViewCommand .Execute (null) "with" (DataBinder.Eval (this.Data, "OutOfViewCommand") как ICommand) .Execute (null) " – jimmyjambles