повторно генерировать столбцы DataGrid во время выполнения в UWP - PullRequest
0 голосов
/ 14 октября 2018

Я использую шаблон 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 работает для этой задачи.Таким образом, я собираюсь «искусственно» сменить источник в ВМ.Я считаю ваш комментарий ответом на мой вопрос.Спасибо, Барри.

1 Ответ

0 голосов
/ 17 октября 2018

После подтверждения от оригинального постера.Оператор хочет найти способ вызвать событие AutogeneratingColumn.Это было написано в официальном документе .Где вы можете увидеть следующее:

"Событие AutoGeneratingColumn наступает один раз для каждого открытого нестатического свойства в связанном типе данных, когда свойство ItemsSource изменяется и свойство AutoGenerateColumns имеет значение true."

...