هل هناك طريقة لربط أمر بالحدث المنهار لجميع TreeViewItems في TreeView؟

StackOverflow https://stackoverflow.com/questions/3589589

سؤال

أحاول أن أفعل شيئًا مشابهًا لما الشخص فيه هذه أراد السؤال القيام به.

هل هناك أي, ، أكثر أناقة ، طريقة للقيام بذلك من العمل المقترح هناك؟

(كملاذ أخير) ، هل هناك إطار عمل MVVM مختلف سيكون له دعم أفضل للقيام بذلك؟

الآن أحاول إجراء عنصر تحكم مخصص يرث من TreeView ، مثل هذا:

public ModdedTreeView()
    {
        this.AddHandler(TreeViewItem.CollapsedEvent, new RoutedEventHandler(ItemCollapsed));
    }

public RelayCommand<RoutedEventArgs> ItemCollapsedCommand
    {
        get { return (RelayCommand<RoutedEventArgs>)GetValue(ItemCollapsedCommandProperty); }
        set { SetValue(ItemCollapsedCommandProperty, value); }
    }

    // Using a DependencyProperty as the backing store for ItemCollapsedCommand.  This enables animation, styling, binding, etc...
    public static readonly DependencyProperty ItemCollapsedCommandProperty =
        DependencyProperty.Register("ItemCollapsedCommand", typeof(RelayCommand<RoutedEventArgs>), typeof(ModdedTreeView), new UIPropertyMetadata(null));

protected void ItemCollapsed(object sender, RoutedEventArgs e)
    {
        if (ItemCollapsedCommand != null)
            ItemCollapsedCommand.Execute(e);
    }

أود بعد ذلك ربط الأمر الذي أريد إطلاقه ، إلى خاصية ItemCollapsedCommand التبعية. لكن حتى هذا لا يعمل.

ما زلت أحصل على InvalidOperationException: "تم تعليق معالجة المرسل ، ولكن لا تزال الرسائل تتم معالجتها."

أيه أفكار؟

هل كانت مفيدة؟

المحلول

لم أستخدم فئة "EventTocommand" الموصوفة في الرابط الذي أشرت إليه. لكن جرب واحد في هذا المنشور: http://sachabarber.net/؟p=514. لقد كتبت للتو عينة صغيرة باستخدام فئة CommandBehavior في هذا المنشور وتمكنت من إرفاق الأمر بحدث isCollapsed لـ treeviewitem مع Xaml التالي:

<TreeView>
    <TreeView.ItemContainerStyle>
        <Style TargetType="TreeViewItem">
            <Setter Property="local:CommandBehavior.TheCommandToRun" Value="{Binding MyCommand}"/>
            <Setter Property="local:CommandBehavior.RoutedEventName" Value="Collapsed"/>
        </Style>
    </TreeView.ItemContainerStyle>

    <TreeViewItem Header="Item">
        <TreeViewItem Header="Item">
            <TreeViewItem Header="Item"/>
        </TreeViewItem>
    </TreeViewItem>
</TreeView>
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top