基于相同的 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...
}));