Я использую шаблон MVVM в приложении UWP.ВМ определяет список столбцов DataGrid.Следующий код, который я использую для генерации столбцов при загрузке UserControl:
private void DataGrid_AutoGeneratingColumn(object sender, DataGridAutoGeneratingColumnEventArgs e)
{
if (ViewModel.PresentColumns.Contains(e.PropertyName.ToLower()))
{
var templateName = e.PropertyName + "DataTemplate";
var templateColumn = new DataGridTemplateColumn();
templateColumn.CellTemplate = Application.Current.Resources[templateName] as DataTemplate;
templateColumn.Header = e.PropertyName;
e.Column = templateColumn;
}
else
{
e.Cancel = true;
}
}
XAML:
<msgrid:DataGrid Name="GridTargets" Grid.Row="1"
Grid.Column="0"
ItemsSource="{x:Bind ViewModel.TargetSteps}"
SelectedItem="{x:Bind ViewModel.SelectedTargetStep, Mode=TwoWay}"
AutoGenerateColumns="True"
GridLinesVisibility="All"
CanUserResizeColumns="False"
AutoGeneratingColumn="DataGrid_AutoGeneratingColumn"/>
VM:
public IEnumerable<string> PresentColumns { get; private set; }
Мне нужно заменитьсетка во время выполнения.Все «доступные сетки» (скажем, 10 сеток в целом) предварительно определены;ViewModel.PresentColumns генерируется во время выполнения для каждой «доступной сетки».Я думаю, чтобы заново генерировать столбцы во время запуска.Шаблоны данных для всех доступных столбцов предопределены в глобальных ресурсах.Это выполнимо или есть другое архитектурное решение?Не желательно хранить несколько сеток в UserControl.
Это DataGrid из Windows Community Toolkit - ns Microsoft.Toolkit.Uwp.UI.Controls.Первоначальная задача: динамически генерировать столбцы DataGrid из ВМ;ограничение MS DataGrid - имя свойства, которое определяет столбец сетки, должно быть определено во время компиляции.У меня есть класс Foo с 100 свойствами.Коллекция Foo является ItemSource of DataGrid.Каждое свойство является пользовательским объектом и определяет столбцы в сетке.Существует DataTemplate для каждого свойства в глобальных ресурсах для представления данных в сетке.Мне нужно показать разные группы свойств в одном представлении, группы мгновенно переключаются с ВМ.Я вижу следующие обходные пути: 1. Мгновенно «заново сгенерировать» только сетку (сомнительно). 2. Свернуть сетку в UserControl, загрузить-выгрузить UserControl, что будет заставлять каждый раз генерировать новую сетку (выполнимо).3.Создать сетку со всеми 100 столбцами и скрыть / показать столбцы по требованию от ВМ (выполнимо, не желательно).
На самом деле я понимаю, что ищу способ вызвать событие AutoGeneratingColumn;изменение свойства ItemsSource работает для этой задачи.Таким образом, я собираюсь «искусственно» сменить источник в ВМ.Я считаю ваш комментарий ответом на мой вопрос.Спасибо, Барри.