У меня есть 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