/ / MVVM XAML में निर्भरता संपत्ति से ट्रिगर के लिए दृष्टिकोण - wpf, xaml, ट्रिगर्स

XAML - wpf, xaml, ट्रिगर्स में निर्भरता संपत्ति से ट्रिगर्स के लिए एमवीवीएम दृष्टिकोण

मैंने कस्टम होस्ट करने के लिए एक सहायक वर्ग बनाया हैनिर्भरता गुण। मैंने एक कस्टम UserControl ऑब्जेक्ट बनाया है जो कुछ हद तक जटिल है और इसे अक्सर लेआउट के बजाय अपडेट करता है। जब एक अटैच प्रॉपर्टीज अपना मूल्य बदलती है तो मैं एक एनीमेशन को ट्रिगर करना चाहता हूं।

यहाँ सहायक श्रेणी का एक उदाहरण है जो एक DP होस्ट करता है।

namespace testProject
{
public class MenuHelper : DependencyObject
{
public static readonly DependencyProperty IsMenuReversedProperty = DependencyProperty.RegisterAttached(
"IsMenuReversed",
typeof(Boolean),
typeof(MenuHelper),
new PropertyMetadata(false));
}
}

और यहाँ एक उदाहरण है कि मैं कैसे डीपी को संदर्भित करना चाहता हूँ:

<UserControl.Triggers>
<Trigger Property="testProject:MenuHelper.IsMenuReversed" Value="True">
<BeginStoryboard>
<Storyboard>
<DoubleAnimation Storyboard.TargetName="Bouncy_Bar" Storyboard.TargetProperty="(UIElement.RenderTransform).(ScaleTransform.ScaleY)" To="-1" Duration="0:0:.002"/>
</Storyboard>
</BeginStoryboard>
</Trigger>
<Trigger Property="testProject:MenuHelper.IsMenuReversed" Value="False">
<BeginStoryboard>
<Storyboard>
<DoubleAnimation Storyboard.TargetName="Bouncy_Bar" Storyboard.TargetProperty="(UIElement.RenderTransform).(ScaleTransform.ScaleY)" To="1" Duration="0:0:.002"/>
</Storyboard>
</BeginStoryboard>
</Trigger>
</UserControl.Triggers>

मुझे लगता है कि मैं उपरोक्त कोड नहीं कर सकता क्योंकि ट्रिगर्स संग्रह केवल हाउस इवेंट ट्रिगर हो सकता है। जो मुझे मेरे सवाल पर लाता है:

इस समस्या का उचित समाधान क्या है?

मैंने IsMenuReversed में एक बदलाव की सूचना देने के लिए एक नियमित करने का प्रयास किया, लेकिन तब मुझे एहसास हुआ कि मैं xaml में DP के वर्तमान मूल्य (जहाँ तक मुझे पता है) की जाँच नहीं कर सकता।

उत्तर:

जवाब के लिए 0 № 1

अब तक जो भी मैं लेकर आया, वह सिर्फ दो अलग-अलग रूटवेट का है। प्रत्येक राज्य के लिए एक। मैं इस समाधान का बहुत बड़ा प्रशंसक नहीं हूं, इसलिए मैं किसी अन्य प्रतिक्रिया का स्वागत करता हूं जो किसी के पास हो सकती है।

यहाँ डीपी के साथ हेल्पर वर्ग है जो दो अलग-अलग रूट किए गए घटनाओं में से एक को आग लगाता है:

    namespace TestProject
{
public class MenuHelper : DependencyObject
{
public static void SetIsMenuReversed(UIElement element, Boolean value)
{
if (GetIsMenuReversed(element) != value)
{
if (value == true)
element.RaiseEvent(new RoutedEventArgs(MenuHelper.MenuIsReversedEvent));
else
element.RaiseEvent(new RoutedEventArgs(MenuHelper.MenuIsNotReversedEvent));
element.SetValue(IsMenuReversedProperty, value);
}
}
public static bool GetIsMenuReversed(DependencyObject obj)
{
return (bool)obj.GetValue(IsMenuReversedProperty);
}

public static readonly RoutedEvent MenuIsReversedEvent = EventManager.RegisterRoutedEvent(
"MenuIsReversed",
RoutingStrategy.Direct,
typeof(RoutedEventHandler),
typeof(MenuHelper));

public static readonly RoutedEvent MenuIsNotReversedEvent = EventManager.RegisterRoutedEvent(
"MenuIsNotReversed",
RoutingStrategy.Direct,
typeof(RoutedEventHandler),
typeof(MenuHelper));
}
}

और यहाँ Xaml है जो रूट की गई घटनाओं को सुनता है और प्रत्येक के लिए एक संबंधित स्टोरीबोर्ड चलाता है:

<UserControl.Triggers>
<EventTrigger RoutedEvent="testProject:MenuHelper.MenuIsReversed">
<BeginStoryboard>
<Storyboard>
<DoubleAnimation Storyboard.TargetName="Bouncy_Bar" Storyboard.TargetProperty="(UIElement.RenderTransform).(ScaleTransform.ScaleY)" To="-1" Duration="0:0:.002"/>
</Storyboard>
</BeginStoryboard>
</EventTrigger>
<EventTrigger RoutedEvent="testProject:MenuHelper.MenuIsNotReversed">
<BeginStoryboard>
<Storyboard>
<DoubleAnimation Storyboard.TargetName="Bouncy_Bar" Storyboard.TargetProperty="(UIElement.RenderTransform).(ScaleTransform.ScaleY)" To="1" Duration="0:0:.002"/>
</Storyboard>
</BeginStoryboard>
</EventTrigger>
</UserControl.Triggers>

कृपया वैकल्पिक समाधान पोस्ट करें यदि आपके पास है :)