基于要链接的同一类,为不同的TreeView绑定不同的对象

问题描述 投票:0回答:1

我目前有一个class myCommand

class myCommand : INotifyCollectionChanged , INotifyPropertyChanged
{
    public string Name { get; set; }
    public ObservableCollection<myFile> subCommand { get; set; }
}

我的窗口中有两个TreeView项。tvCommandList包含所有可用命令,而tvFinalList包含所有选定命令。

我使用contextmenu将项目从tvCommandList复制到tvFinalList;在mainWindow中,我有两个ObservableCollection项,它们绑定到TreeViewItems。

    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,但仍然面临相同的问题

c# wpf data-binding treeview 2-way-object-databinding
1个回答
0
投票

这是因为您的两个集合对象是引用类型。您需要将这些收集对象用作值类型。

© www.soinside.com 2019 - 2024. All rights reserved.