好的,我了解了你的要求。关于具有可编辑集合的MVVM示例,以下是一个可能的实现:
首先,在ViewModel
中定义一个ObservableCollection
类型的属性EditableCollection
,用于存储可编辑的数据集合。在ViewModel
的OnEditCommit
事件中,将集合中的所有数据保存到数据库中,并调用RelayCommand
类型的SaveData
方法,以便在后台线程中执行保存操作。
接下来,在View
中,使用DataTemplate
来定义集合中每个元素的可编辑界面,并在View
的Resources
中定义一个EditableCollectionViewTemplate
的模板,用于渲染可编辑集合的界面。在ViewModel
的OnPropertyChanged
事件中,根据集合中当前编辑状态来更新EditableCollectionViewTemplate
中的数据。
最后,在ViewModel
的SaveData
方法中,将集合中的所有数据保存到数据库中,并通知ViewModel
的OnPropertyChanged
事件,以便更新View
中的数据。
以下是一个简单的示例代码:
ViewModel:
public class MyViewModel : ObservableObject
{
private ObservableCollection<int> _editableCollection;
public ObservableCollection<int> EditableCollection
{
get => _editableCollection;
set => Set(ref _editableCollection, value);
}
public MyViewModel()
{
EditableCollection = new ObservableCollection<int> {1, 2, 3, 4, 5};
}
public RelayCommand<int> SaveData { get; }
public void OnEditCommit(int item)
{
EditableCollection.Remove(item);
SaveData.Execute(item);
}
}
View:
<UserControl
x:Class="MyApp.Views.MyView"
xmlns:views="clr-namespace:MyApp.Views"
xmlns:vm="clr-namespace:MyApp.ViewModels"
xmlns:telerik="http://schemas.telerik.com/2008/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:MyApp.Views"
xmlns:i="http://schemas.microsoft.com/expression/2010/interactivity"
xmlns:ei="http://schemas.microsoft.com/expression/2010/interactions"
xmlns:mah="clr-namespace:MahApps.Metro.Controls;assembly=MahApps.Metro"
WindowTransitionsEnabled="False"
mc:Ignorable="d"
Title="My App"
Height="850"
Width="1800"
WindowStartupLocation="CenterScreen"
Loaded="Window_Loaded"
Style="{StaticResource DefaultWindow}">
<Window.DataContext>
<vm:MyViewModel />
</Window.DataContext>
<Window.Resources>
<local:EditableCollectionViewTemplate x:Key="EditableCollectionViewTemplate" />
</Window.Resources>
<mah:MetroWindow.RightWindowCommands>
<mah:WindowCommands>
<Button x:Name="cmdMinimize"
Style="{StaticResource WindowMinimizeButton}" />
<Button x:Name="cmdMaximize"
Style="{StaticResource WindowMaximizeButton}" />
<Button x:Name="cmdExit"
Style="{StaticResource WindowExitButton}" />
</mah:WindowCommands>
</mah:MetroWindow.RightWindowCommands>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*" />
<ColumnDefinition Width="auto" />
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="auto" />
<RowDefinition Height="*" />
</Grid.RowDefinitions>
<Grid Grid.Column="0" Grid.ColumnSpan="2" Grid.Row="1" Panel.ZIndex="1">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="auto" />
领取专属 10元无门槛券
手把手带您无忧上云