基于相同的 class 获取链接,为不同的 TreeView 绑定不同的对象
Binding different objects for different TreeView based on same class getting linked
我目前有一个 class myCommand
class myCommand : INotifyCollectionChanged , INotifyPropertyChanged
{
public string Name { get; set; }
public ObservableCollection<myFile> subCommand { get; set; }
}
我的 window 中有两个 TreeView 项目。
tvCommandList 包含所有可用的命令,tvFinalList 包含所有选定的命令。
我使用上下文菜单将项目从 tvCommandList 复制到 tvFinalList;
在主窗口中,我有两个绑定到 TreeViewItems 的 ObservableCollection 项。
ObservableCollection<myCommand> cmdlist = null;
ObservableCollection<myCommand> finallist = null;
这些绑定到 XAML 文件中的 TreeView。
<Grid>
<Grid.Resources>
<ResourceDictionary>
<Style x:Key="styleTemplate" TargetType="TreeViewItem">
<Setter Property="IsSelected" Value="{Binding IsInitiallySelected, Mode=TwoWay}" />
</Style>
<HierarchicalDataTemplate DataType="{x:Type data:myCommand}"
ItemsSource="{Binding subCommand, Mode=TwoWay}">
<TextBlock Text="{Binding Name, Mode=TwoWay}" />
</HierarchicalDataTemplate>
</ResourceDictionary>
</Grid.Resources>
</Grid>
<TreeView x:Name="tvSendList" ItemsSource="{Binding}" DataContext="{Binding cmdlist}">
<TreeView x:Name="tvRecvList" ItemsSource="{Binding}" DataContext="{Binding finallist}">
我将 TreeViewItem 从 cmdlist 复制到 finallist 并为海关数据编辑它们。
我在这里面临的问题是,如果我修改 finallist 中的项目(更新 Name 值),cmdlist 项目也得到更新,这
我不确定如何着手解决这个问题。
我尝试将 ResourceDictionary 具体移动到每个 TreeView,但仍然面临同样的问题
在创建集合的副本时,您还应该克隆,即创建每个 myFile
对象的副本,例如:
finalist = new ObservableCollection<myFile>(cmdlist.Select(x => new myFile()
{
Property1 = x.Property1,
Property2 = x.Property2
//copy all property values...
}));
我目前有一个 class myCommand
class myCommand : INotifyCollectionChanged , INotifyPropertyChanged
{
public string Name { get; set; }
public ObservableCollection<myFile> subCommand { get; set; }
}
我的 window 中有两个 TreeView 项目。 tvCommandList 包含所有可用的命令,tvFinalList 包含所有选定的命令。
我使用上下文菜单将项目从 tvCommandList 复制到 tvFinalList; 在主窗口中,我有两个绑定到 TreeViewItems 的 ObservableCollection 项。
ObservableCollection<myCommand> cmdlist = null;
ObservableCollection<myCommand> finallist = null;
这些绑定到 XAML 文件中的 TreeView。
<Grid>
<Grid.Resources>
<ResourceDictionary>
<Style x:Key="styleTemplate" TargetType="TreeViewItem">
<Setter Property="IsSelected" Value="{Binding IsInitiallySelected, Mode=TwoWay}" />
</Style>
<HierarchicalDataTemplate DataType="{x:Type data:myCommand}"
ItemsSource="{Binding subCommand, Mode=TwoWay}">
<TextBlock Text="{Binding Name, Mode=TwoWay}" />
</HierarchicalDataTemplate>
</ResourceDictionary>
</Grid.Resources>
</Grid>
<TreeView x:Name="tvSendList" ItemsSource="{Binding}" DataContext="{Binding cmdlist}">
<TreeView x:Name="tvRecvList" ItemsSource="{Binding}" DataContext="{Binding finallist}">
我将 TreeViewItem 从 cmdlist 复制到 finallist 并为海关数据编辑它们。 我在这里面临的问题是,如果我修改 finallist 中的项目(更新 Name 值),cmdlist 项目也得到更新,这 我不确定如何着手解决这个问题。
我尝试将 ResourceDictionary 具体移动到每个 TreeView,但仍然面临同样的问题
在创建集合的副本时,您还应该克隆,即创建每个 myFile
对象的副本,例如:
finalist = new ObservableCollection<myFile>(cmdlist.Select(x => new myFile()
{
Property1 = x.Property1,
Property2 = x.Property2
//copy all property values...
}));