Я ищу лучший способ получения данных из моделей для экспорта.Ниже я обрисовал в общих чертах, какова моя текущая стратегия, но я чувствую, что есть лучшая.
Предположим, у меня есть элемент управления NestingView с текстовым полем, кнопкой и itemcontrol.Кнопка добавляет новый NestingView в ItemsControl.Моя цель - иметь возможность экспортировать данные, включая путь вложения.
В частности, в JSON, но я думаю, что это не так.Для справки, однако, результат будет выглядеть примерно так:
{
"Text": "",
"Children": []
}
В настоящий момент я придумал способ вложения элементов управления, чтобы NestingViewModel содержал ObservableCollection, который используется элементом управления items.Таким образом, сохранение было бы вопросом перебора коллекций в коллекциях ... и т. Д.
Это, я полагаю, работает , но, конечно, это выглядит грязно, когда виртуальные машины с виртуальнымиВМ ... так что мне интересно, есть ли лучший / легкий / чище / "больше MVVM" способ сделать это.
Для краткости я не использую модель в этом примере, но предположим, что она будет там и будет содержать проверенные данные, которые в конечном итоге используются для экспорта.Также обратите внимание, что я использую Prism.
NestingViewModel.cs
public class NestingViewModel : BindableBase
{
/// <summary>
/// Initializes a new instance of NestingViewModel
/// </summary>
public NestingViewModel()
{
NestingViewModels = new ObservableCollection<NestingViewModel>();
NewNestingView = new DelegateCommand(AddNestingViewModel);
}
public ObservableCollection<NestingViewModel> NestingViewModels { get; }
private String _TextBody;
/// <summary>
/// Gets and sets the text body
/// </summary>
public String TextBody
{
get => _TextBody;
set => SetProperty(ref _TextBody, value);
}
public ICommand NewNestingView { get; }
/// <summary>
/// Adds a new NestingViewModel to the collection
/// </summary>
private void AddNestingViewModel()
{
NestingViewModels.Add(new NestingViewModel());
}
}
NestingView.xaml
<Border BorderBrush="WhiteSmoke" BorderThickness="5">
<StackPanel Margin="5">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="6*"/>
<ColumnDefinition Width="4*"/>
<ColumnDefinition Width="Auto"/>
</Grid.ColumnDefinitions>
<TextBox Grid.Column="0" Text="{Binding TextBody}"/>
<Button Grid.Column="2" Content="New" Command="{Binding NewNestingView}"/>
</Grid>
<ItemsControl Margin="20 5 0 0" ItemsSource="{Binding NestingViewModels}">
<ItemsControl.ItemTemplate>
<DataTemplate>
<local:NestingView/>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
</StackPanel>
</Border>
Пример
Так что в этом примере JSON будет выглядеть следующим образом:
{
"Text": "Parent",
"Children": [
{
"Text": "ChildA",
"Children": null
},
{
"Text": "ChildB",
"Children": [
{
"Text": "ChildB's ChildA",
"Children": null
},
{
"Text": "ChildB's ChildB",
"Children": null
}
]
},
{
"Text": "ChildA",
"Children": null
}
]
}