ツリービュー内のすべてのtreeViewitemsの崩壊したイベントにコマンドをバインドする方法はありますか?
-
01-10-2019 - |
質問
私はその人が何に似たことをしようとしています これ 質問はやりたかった。
ある どれか, 、これを行うためのよりエレガントな方法で、そこで提案されている作業よりも?
(最後の手段として)これを行うためのより良いサポートを持つ別の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
:「ディスパッチャーの処理は停止されていますが、メッセージはまだ処理されています。」
何か案は?
解決
参照したリンクで説明されている「EventToCommand」クラスを使用していません。しかし、この投稿のものを試してみてください。 http://sachabarber.net/?p=514. 。私はその投稿でコマンドベーヴィオールクラスを使用して小さなサンプルを書きましたが、次の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>
所属していません StackOverflow