我正在尝试做类似于this问题中的人想要做的事情。
是否有任何,更优雅的方式来做这个比在那里建议的解决方案?
(作为最后的手段)是否有一个不同的mvvm框架可以更好地支持这样做?
现在我正在尝试创建一个继承自树视图的自定义控件,如下所示:
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 dependancy属性。但即使这样也行不通。
我一直在InvalidOperationException
:
“调度程序处理已暂停,但邮件仍在处理中。”
有什么想法吗?
答案 0 :(得分:1)
我没有使用您引用的链接中描述的“EventToCommand”类。但请尝试这篇文章中的一个:http://sachabarber.net/?p=514。我刚刚在该帖子中使用CommandBehavior类编写了一些示例,我可以使用以下XAML将命令附加到TreeViewItem的IsCollapsed事件:
<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>