Чтобы связать «нагруженное» и «разгружали» событие я использую следующий код в моей странице XAML:Как повторно использовать Interaction Поведения в XAML для WinRT приложения с архитектурой MVVM
<Page ...>
<interactivity:Interaction.Behaviors>
<core:EventTriggerBehavior EventName="Loaded">
<core:InvokeCommandAction Command="{Binding LoadedCommand}" />
</core:EventTriggerBehavior>
<core:EventTriggerBehavior EventName="Unloaded">
<core:InvokeCommandAction Command="{Binding UnloadedCommand}" />
</core:EventTriggerBehavior>
</interactivity:Interaction.Behaviors>
<Grid />
</Page>
Все работает, как ожидалось однако я копирую этот же бит кода во все виды? Как я могу сделать это для повторного использования?
EDIT
Я создал вложенное свойство с помощью кода в этом post.
Моя Attached свойство выглядит следующим образом:
public static class UiBehaviors
{
public static readonly DependencyProperty AttachedTriggersProperty = DependencyProperty.RegisterAttached("AttachedTriggers", typeof(EventTriggerCollection), typeof(UiBehaviors), new PropertyMetadata(null, OnAttachedTriggersChanged));
private static void OnAttachedTriggersChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
BehaviorCollection triggers = Interaction.GetBehaviors(d);
if (e.OldValue != null)
{
foreach (EventTriggerBehavior trigger in (EventTriggerCollection)e.OldValue)
triggers.Remove(trigger);
}
if (e.NewValue == null)
return;
foreach (EventTriggerBehavior trigger in (EventTriggerCollection)e.NewValue)
triggers.Add(trigger);
}
public static void SetAttachedTriggers(DependencyObject element, EventTriggerCollection value)
{
element.SetValue(AttachedTriggersProperty, value);
}
public static EventTriggerCollection GetAttachedTriggers(DependencyObject element)
{
return (EventTriggerCollection)element.GetValue(AttachedTriggersProperty);
}
}
public class EventTriggerCollection : Collection<EventTriggerBehavior>
{
}
Мои Xaml выглядит следующим образом:
<Style x:Name="Test" TargetType="UserControl">
<Setter Property="storeApplication:UiBehaviors.AttachedTriggers">
<Setter.Value>
<storeApplication:EventTriggerCollection>
<core:EventTriggerBehavior EventName="Loaded">
<core:InvokeCommandAction Command="{Binding LoadedCommand}" />
</core:EventTriggerBehavior>
<core:EventTriggerBehavior EventName="Unloaded">
<core:InvokeCommandAction Command="{Binding UnloadedCommand}" />
</core:EventTriggerBehavior>
</storeApplication:EventTriggerCollection>
</Setter.Value>
</Setter>
</Style>
рент-: Shared = False атрибут требуется на EventTriggerCollection, чтобы создать новый набор триггеров каждый раз при доступе к объекту. Без него триггер будет работать только для первого элемента управления, который обращается к свойству.
К сожалению, я не могу использовать этот атрибут, потому что он не поддерживается в WinRT. См. Это post. Я сейчас застрял :(Что я упускаю
Благодарим за отзыв. Я попытался определить прикрепленное свойство без большой удачи. См. Мой отредактированный пост. У вас есть пример «Sub Classing» на странице Xaml? –
@CoolBreeze Обновлен мой ответ. –
Благодарим вас за оба примера. Я предпочел приложенное решение поведения :) –