- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
目前我正在尝试在 TreeView 中显示自定义类的 ObservableCollection,当用户双击“项目”时,它将触发 ViewModel 中的一个方法,将选定的自定义类作为参数传递。我正在为我的 WPF 应用程序使用 MVVM 结构。
我面临的问题是 Observable Collection 使用 HierarchicalDataTemplate 显示。查看 TreeView 的整个 XAML 代码下方
<TreeView Name="DeviceTreeView" ItemsSource="{Binding ViewableTIADeviceTree}" Grid.Column="3" Margin="5">
<TreeView.Resources>
<HierarchicalDataTemplate DataType="{x:Type treeviewable:ViewableTIADevice}" ItemsSource="{Binding DeviceItems}">
<TextBlock Text="{Binding Path=DeviceName}"/>
<HierarchicalDataTemplate.ItemContainerStyle>
<Style TargetType="{x:Type treeviewable:ViewableTIADevice}">
<Setter Property="commandBehaviors:MouseDoubleClick.Command"
Value="{Binding TIADeviceTreeItemDoubleClick}"/>
<Setter Property="commandBehaviors:MouseDoubleClick.CommandParameter"
Value="{Binding}"/>
</Style>
</HierarchicalDataTemplate.ItemContainerStyle>
</HierarchicalDataTemplate>
<DataTemplate DataType="{x:Type treeviewable:ViewableDeviceItem}">
<TextBlock Text="{Binding Path=Name}"/>
</DataTemplate>
</TreeView.Resources>
</TreeView>
public class MouseDoubleClick
{
public static DependencyProperty CommandProperty =
DependencyProperty.RegisterAttached("Command",
typeof(ICommand),
typeof(MouseDoubleClick),
new UIPropertyMetadata(CommandChanged));
public static DependencyProperty CommandParameterProperty =
DependencyProperty.RegisterAttached("CommandParameter",
typeof(object),
typeof(MouseDoubleClick),
new UIPropertyMetadata(null));
public static void SetCommand(DependencyObject target, ICommand value)
{
target.SetValue(CommandProperty, value);
}
public static void SetCommandParameter(DependencyObject target, object value)
{
target.SetValue(CommandParameterProperty, value);
}
public static object GetCommandParameter(DependencyObject target)
{
return target.GetValue(CommandParameterProperty);
}
public static void CommandChanged(DependencyObject target, DependencyPropertyChangedEventArgs args)
{
Control control = target as Control;
if(control != null)
{
if((args.NewValue != null) && (args.OldValue == null))
{
control.MouseDoubleClick += OnMouseDoubleClick;
}
else if((args.NewValue == null) && (args.OldValue != null))
{
control.MouseDoubleClick -= OnMouseDoubleClick;
}
}
}
private static void OnMouseDoubleClick(object sender, RoutedEventArgs e)
{
Control control = sender as Control;
ICommand command = (ICommand)control.GetValue(CommandProperty);
object commandParameter = control.GetValue(CommandParameterProperty);
command.Execute(commandParameter);
}
}
<Style TargetType"{x:Type TreeViewItem}">
public RelayCommand TIADeviceTreeItemDoubleClick { get; set; }
TIADeviceTreeItemDoubleClick = new RelayCommand(c => tiaDeviceTreeItemDoubleClick(c));
private void tiaDeviceTreeItemDoubleClick(object value)
{
//code
}
public class ViewableTIADevice
{
public ViewableTIADevice()
{
DeviceItems = new List<ViewableDeviceItem>();
}
public string DeviceName { get; set; }
public IList<ViewableDeviceItem> DeviceItems { get; set; }
}
最佳答案
我相信您对您的数据上下文有误解,请考虑以下示例:
<TreeView ItemsSource="{Binding Items}">
<TreeView.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding ItemProperty1}"></TextBlock>
</DataTemplate>
</TreeView.ItemTemplate>
<TreeView.ItemContainerStyle>
<Style TargetType="TreeViewItem">
<Setter Property="Local:MouseDoubleClick.Command"
Value="{Binding ElementName=DeviceTreeView, Path=DataContext.TIADeviceTreeItemDoubleClick}"/>
<Setter Property="Local:MouseDoubleClick.CommandParameter"
Value="{Binding}"/>
</Style>
</TreeView.ItemContainerStyle>
</TreeView>
Value="{Binding ElementName=DeviceTreeView, Path=DataContext.TIADeviceTreeItemDoubleClick}"
{Binding TIADeviceTreeItemDoubleClick}
<Setter Property="Local:MouseDoubleClick.CommandParameter"
Value="{Binding}"
关于c# - 使用带有 HierarchicalDatatemplate 的附加行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48807963/
如何在我的 TreeView 中通过 DataTrigger 更改 HierarchicalDataTemplate?
我有两个相同的 HierarchicalDataTemplates。唯一的区别是模板的数据类型。 ... ... 如何避免在两个数据模板中复制堆栈面板的内容? 我考虑将 Sta
我需要在 WPF 中创建一个看起来像这样的 TreeView: 管理员(组) 用户 (固定节点) Alice Adams(用户) Bob Brown(用户) 权限 (固定节点) 删除(权限) 更新(权
似乎有大量关于 HierarchicalDataTemplate 的信息,但我很难找到足够具体的信息来帮助我处理包含不同类型的层次结构。 假设类结构如下: public class classA {
我正在尝试使用 HierarchicalDataTemplate 显示混合类型的 TreeView ,但到目前为止我所有的尝试都失败了.. 我有一个树状类,可以有两种不同类型的 child 。 (位置
我正在尝试以绝对最简单的方式使用 HierarchicalDataTemplate 将嵌套数据绑定(bind)到 WPF TreeView。由于某种原因,我的树的 child 不可见: 这是整个 XA
这是一些 XAML data:FolderEntity 是一个 LINQ to SQL 数据类,它实现了 INotifyPropertyChanging 和 INotifyProperty
我有一个 TreeView与 HierarchicalDataTemplate .项目已正确填写,但我无法点击 TreeView项目。 (我不能选择一个,所以它被标记为蓝色)。 我可以点击前面的Tre
目前我正在尝试在 TreeView 中显示自定义类的 ObservableCollection,当用户双击“项目”时,它将触发 ViewModel 中的一个方法,将选定的自定义类作为参数传递。我正在为
假设我有一个 Node 类 public class Node { public string Name; public ObservableCollection SubNodes;
我正在尝试加载 foillowing xaml: 在我
我正在尝试加载 foillowing xaml: 在我
我有一个类 MyClass,它继承自 UserControl: public class MyClass : UserControl { public string NodeName { ge
这个有点复杂。我正在尝试创建一个具有 TreeView 和一些其他控件的用户控件,以创建对其他实现有用的可重用控件。 我遇到的问题是我不知道如何将在控件外部定义的 HierarchicalDataTe
对于我的 TreeView ,我有两个提供 ItemsSource 的不同类。 public class TreeViewModel : ViewModelBase { public Obse
我在使用 HierarchicalDataTemplate 和 VirtualizingStackPanel 的 wpf TreeView 时遇到问题。使用下面提供的代码,我运行应用程序并展开所有 T
有谁知道如何动态更改 WPF HierarchicalDataTemplate 中控件(TextBox、ComboBox 等)的 IsReadOnly 属性? 我希望能够使 HierarchicalD
我有一个 TreeView它使用 HierarchicalDataTemplate绑定(bind)其数据。 它看起来像这样: 现在,从主窗口的代码隐藏
我有一个 TreeView,它工作得很好。在这个菜单中,我有一个上下文菜单,它工作得很好,除了手头的问题命令之外。 我认为主要部分在这里:
您将如何将 CollectionViewSource(提供排序行为)与 HierarchicalDataTemplate 的 ItemsSource 结合使用? 因此,鉴于下面的代码,我如何对层次结构
我是一名优秀的程序员,十分优秀!