Связывание разных объектов для разных TreeView на основе связывания одного и того же класса - PullRequest
0 голосов
/ 16 апреля 2020

В настоящее время у меня есть класс myCommand

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

У меня есть два элемента TreeView в моем окне. tvCommandList , который содержит все доступные команды и tvFinalList для хранения всех выбранных команд.

Я использовал contextmenu для копирования элементов из tvCommandList в tvFinalList ; В главном окне у меня есть два элемента ObservableCollection, которые связаны с TreeViewItems.

    ObservableCollection<myCommand> cmdlist = null;
    ObservableCollection<myCommand> finallist = null;

Они связаны с TreeView в файле XAML.

<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 до финалист и отредактируйте их для таможенных данных. Проблема, с которой я здесь сталкиваюсь, заключается в том, что, если я изменяю элемент (обновите значение Name ) в finallist , элемент cmdlist также обновляется, что я Я не уверен, как go собирается решить эту проблему.

Я пытался переместить ResourceDictionary для каждого TreeView отдельно, но все еще сталкивался с той же проблемой

1 Ответ

1 голос
/ 16 апреля 2020

Вы также должны клонировать, то есть создавать копию каждого отдельного объекта myFile при создании копии коллекции, например:

finalist = new ObservableCollection<myFile>(cmdlist.Select(x => new myFile()
{
    Property1 = x.Property1,
    Property2 = x.Property2
    //copy all property values...
}));
...