Как избежать исчезновения сгенерированных вручную столбцов внутри WPF DataGrid при переключении между представлениями? - PullRequest
0 голосов
/ 18 апреля 2019

У меня есть TabControl с двумя TabItem .На основе ViewModel текущей вкладки выбирается соответствующий вид.Первая вкладка имеет вид, который состоит из кнопки и DataGrid .Когда нажата кнопка , в коде следует добавить столбцы.

Генерация столбцов работает хорошо, но когда я переключаю вкладки и возвращаюсь к первой вкладке, столбцов больше нет.Как с этим справиться?

Это мои модели и вид моделей.ViewModel1 - это ViewModel первой буквы, а ViewModel2 - это ViewModel второй вкладки.MainViewModel - это ViewModel самого окна.

public class MainViewModel
    {
        public ObservableCollection<object> ViewModels { get; set; }
            = new ObservableCollection<object>() {
                new ViewModel1(),
                new ViewModel2()
        };
    }

    public class ViewModel1
    {
        public ObservableCollection<Model> BindList { get; set; }

        public ViewModel1()
        {
            BindList = new ObservableCollection<Model>();
            BindList.Add(new Model() { Name = "Hello", Age = 99 });
        }
    }

    public class ViewModel2
    {

    }

    public class Model
    {
        public string Name { get; set; }

        public int Age { get; set; }
    }

Это мой MainWindow.xaml.Не забудьте установить в DataContext новый экземпляр типа MainViewModel в коде позади.

<Grid>
        <TabControl ItemsSource="{Binding ViewModels}">
            <TabControl.Resources>
                <DataTemplate DataType="{x:Type local:ViewModel1}">
                    <local:UserControl1 />
                </DataTemplate>
                <DataTemplate DataType="{x:Type local:ViewModel2}">
                    <local:UserControl2 />
                </DataTemplate>
            </TabControl.Resources>
            <TabControl.ItemContainerStyle>
                <Style TargetType="TabItem">
                    <Setter Property="Header" Value="Tabname" />
                </Style>
            </TabControl.ItemContainerStyle>
        </TabControl>
    </Grid>

Затем я создал два UserControl .Первый должен выглядеть следующим образом:

<StackPanel>
        <Button Click="Button_Click">Generate</Button>
        <DataGrid x:Name="TestGrid" ItemsSource="{Binding BindList}" AutoGenerateColumns="False"></DataGrid>
    </StackPanel>

Код для создания моих столбцов внутри первой вкладки должен выглядеть следующим образом:

private void Button_Click(object sender, RoutedEventArgs e)
        {
            TestGrid.Columns.Clear();

            Binding binding1 = new Binding("Name");
            Binding binding2 = new Binding("Age");

            TestGrid.Columns.Add(new DataGridTextColumn() { Binding = binding1 });
            TestGrid.Columns.Add(new DataGridTextColumn() { Binding = binding2 });
        }

Второй UserControl пусто и должно иметь имя UserControl2

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...