Есть ли способ связать команду для рухнутого события всех деревьев VreeviewItems в TreeView?
-
01-10-2019 - |
Вопрос
Я пытаюсь сделать что-то похожее на то, что человек в это Вопрос хотел сделать.
Здесь Любые, более элегантный, способ сделать это, чем там работа?
(Как в крайнем случае) есть ли другая структура 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>