Измените привязку к xaml ObservableCollection <type>, введите во время выполнения UWP - PullRequest
0 голосов
/ 19 июня 2020

У меня есть DataGrid на моей странице xaml, которую я привязываю к ObservableCollection "MainListData" в viewModel страницы, используя MVVM:

    <controls:DataGrid Grid.Column="1"
                       Background="Gray"
                       ItemsSource="{Binding MainListData}"
                       AutoGenerateColumns="True"
                       GridLinesVisibility="All"
                       AlternatingRowBackground="LightGray">
    </controls:DataGrid>

Я хочу использовать ObservableCollection для отображения различных типов наборов данных. DataGrid прекрасно работает с AutoGenerateColumns, используя пользовательский <type> в ObservableCollection<type>. Например, ObservableCollection<Cars>:

public class Cars
{
    public string Sedans { get; set; }
    public string Pickup { get; set; }
    public string Unknown { get; set; }
}

будет отображаться как:

+--------+---------+--------+
| Sedans | Pickup  | Uknown |
+--------+---------+--------+
| car 1  | pickup1 | ?1     |
| car 2  | pickup2 | ?2     |
| ...    | ...     | ...    |
+--------+---------+--------+

OR , ObservableCollection<Bikes>:

public class Bikes
{
    public string Fast { get; set; }
    public string Slow { get; set; }
    public string Big { get; set; }
    public string Small { get; set; }
    public string Electric { get; set; }
}

будет отображаться как:

+--------+-------+------+--------+-----------+
|  Fast  | Slow  | Big  | Small  | Electric  |
+--------+-------+------+--------+-----------+
| fast 1 | slow1 | big1 | small1 | electric1 |
| fast 2 | slow2 | big2 | small2 | electric2 |
| ...    | ...   | ...  | ...    | ...       |
+--------+-------+------+--------+-----------+

Вопрос: Во время выполнения: если пользователь выбирает просмотр данных автомобилей или мотоциклов или других данных, как я могу изменить <type> и, следовательно, данные привязки "MainListData" ObservableCollection? Это правильный подход?

Полагаю, я хочу повторно использовать DataGrid и привязать ObservableCollection.

Ответы [ 2 ]

0 голосов
/ 26 июня 2020

К вашему сведению - я ненавижу отвечать на свои вопросы и не выберу его в качестве принятого ответа, пока кто-то здесь не согласится, что это хорошее или адекватное и правильное решение моего вопроса:

Я изменил объект, связанный с xaml DataGrid, от ObservableCollection до object:

    private object MainListData_;
    public object MainListData
    {
        get { return MainListData_; }
        set { SetProperty(ref MainListData_, value); }
    }

Затем вы устанавливаете этот объект равным любому List<type> по выбору пользователя, например :

        List<UserDetails> userDetails = new List<UserDetails>();

        userDetails.Add(new UserDetails { Info = "UserName"() });
        userDetails.Add(new UserDetails { Info = "UserPC"});
        userDetails.Add(new UserDetails { Info = "UserID"});

        MainListData = userDetails;

Это успешно обновляет DataGrid со столбцами и данными, указанными c до вашего List<type>, который может иметь любой пользовательский Type, с которым вы создаете экземпляр List. Таким образом, устраняется проблема попытки «ReDim» и ObservableCollection во время выполнения.

0 голосов
/ 22 июня 2020

На основе документа DataGrid , в нем упоминается, что при установке свойства ItemsSource и ItemsSource элемент управления DataGrid автоматически создает столбцы. Поэтому, если вы хотите переключаться между данными Cars и Bikes, просто нужно повторно установить ItemsSource, он повторно сгенерирует столбцы. Например:

.xaml:

<StackPanel>
    <Button Click="Button_Click">change to Bikes</Button>

    <controls:DataGrid Grid.Column="1"
                       Background="Gray"
                       ItemsSource="{x:Bind MainListData,Mode=OneWay}"
                       AutoGenerateColumns="True"
                       AlternatingRowBackground="LightGray" x:Name="MyDataGrid">

    </controls:DataGrid>
</StackPanel>

.cs:

private ObservableCollection<Bikes> MainListData2 { get; set; }

private void Button_Click(object sender, RoutedEventArgs e)
{
    MyDataGrid.ItemsSource = MainListData2;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...