009_DI-Elec/newFront/c#前端/SWS.Commons/Helper/Behaviours/TreeViewSelectedItemBehavior.cs
CHEN-ZW\acer c76c8ada14 Merge branch 'main' of http://27.154.35.18:7053/yuxingheng/009_DI-Elec
# Conflicts:
#	newFront/c#前端/SWS.CAD/Commands.cs
#	newFront/c#前端/SWS.Electrical/obj/Debug/Views/DialogTest2.g.i.cs
#	newFront/c#前端/SWS.Electrical/obj/Debug/Views/SWSDialogWindow.g.cs
#	newFront/c#前端/SWS.Electrical/obj/Debug/Views/SWSDialogWindow.g.i.cs
#	newFront/c#前端/SWS.WPF/obj/Debug/Views/CustomDialogWindow.g.cs
#	newFront/c#前端/SWS.WPF/obj/Debug/Views/CustomDialogWindow.g.i.cs
2025-10-09 18:08:19 +08:00

58 lines
2.1 KiB
C#

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using Microsoft.Xaml.Behaviors;
namespace SWS.Commons.Helper.Behaviours
{
/// <summary>
/// 让 WPF TreeView 支持 SelectedItem 双向绑定的行为类。
/// 应用于 TreeView 后,可在 ViewModel 中直接使用绑定方式访问/设置选中项。
/// </summary>
public static class TreeViewSelectedItemBehavior
{
public static readonly DependencyProperty SelectedItemProperty =
DependencyProperty.RegisterAttached(
"SelectedItem",
typeof(object),
typeof(TreeViewSelectedItemBehavior),
new FrameworkPropertyMetadata(
null,
FrameworkPropertyMetadataOptions.BindsTwoWayByDefault,
OnSelectedItemChanged));
// 获取附加属性值
public static object GetSelectedItem(TreeView treeView) =>
treeView.GetValue(SelectedItemProperty);
// 设置附加属性值
public static void SetSelectedItem(TreeView treeView, object value) =>
treeView.SetValue(SelectedItemProperty, value);
// 属性变化时的事件处理
private static void OnSelectedItemChanged(DependencyObject sender, DependencyPropertyChangedEventArgs e)
{
if (sender is TreeView treeView)
{
// 解耦旧事件处理器
treeView.SelectedItemChanged -= OnTreeViewSelectedItemChanged;
// 连接新事件处理器
treeView.SelectedItemChanged += OnTreeViewSelectedItemChanged;
}
}
// TreeView选择项变化时的处理
private static void OnTreeViewSelectedItemChanged(object sender, RoutedPropertyChangedEventArgs<object> e)
{
var treeView = (TreeView)sender;
// 更新附加属性值
treeView.SetCurrentValue(SelectedItemProperty, e.NewValue);
}
}
}