首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

具有可编辑集合的MVVM示例,其中View不直接使用模型类型

好的,我了解了你的要求。关于具有可编辑集合的MVVM示例,以下是一个可能的实现:

首先,在ViewModel中定义一个ObservableCollection类型的属性EditableCollection,用于存储可编辑的数据集合。在ViewModelOnEditCommit事件中,将集合中的所有数据保存到数据库中,并调用RelayCommand类型的SaveData方法,以便在后台线程中执行保存操作。

接下来,在View中,使用DataTemplate来定义集合中每个元素的可编辑界面,并在ViewResources中定义一个EditableCollectionViewTemplate的模板,用于渲染可编辑集合的界面。在ViewModelOnPropertyChanged事件中,根据集合中当前编辑状态来更新EditableCollectionViewTemplate中的数据。

最后,在ViewModelSaveData方法中,将集合中的所有数据保存到数据库中,并通知ViewModelOnPropertyChanged事件,以便更新View中的数据。

以下是一个简单的示例代码:

ViewModel:

代码语言:csharp
复制
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:

代码语言:xaml
复制

<UserControl

代码语言:txt
复制
x:Class="MyApp.Views.MyView"
代码语言:txt
复制
xmlns:views="clr-namespace:MyApp.Views"
代码语言:txt
复制
xmlns:vm="clr-namespace:MyApp.ViewModels"
代码语言:txt
复制
xmlns:telerik="http://schemas.telerik.com/2008/xaml/presentation"
代码语言:txt
复制
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
代码语言:txt
复制
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
代码语言:txt
复制
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
代码语言:txt
复制
xmlns:local="clr-namespace:MyApp.Views"
代码语言:txt
复制
xmlns:i="http://schemas.microsoft.com/expression/2010/interactivity"
代码语言:txt
复制
xmlns:ei="http://schemas.microsoft.com/expression/2010/interactions"
代码语言:txt
复制
xmlns:mah="clr-namespace:MahApps.Metro.Controls;assembly=MahApps.Metro"
代码语言:txt
复制
WindowTransitionsEnabled="False"
代码语言:txt
复制
mc:Ignorable="d"
代码语言:txt
复制
Title="My App"
代码语言:txt
复制
Height="850"
代码语言:txt
复制
Width="1800"
代码语言:txt
复制
WindowStartupLocation="CenterScreen"
代码语言:txt
复制
Loaded="Window_Loaded"
代码语言:txt
复制
Style="{StaticResource DefaultWindow}">
代码语言:txt
复制
<Window.DataContext>
代码语言:txt
复制
    <vm:MyViewModel />
代码语言:txt
复制
</Window.DataContext>
代码语言:txt
复制
<Window.Resources>
代码语言:txt
复制
    <local:EditableCollectionViewTemplate x:Key="EditableCollectionViewTemplate" />
代码语言:txt
复制
</Window.Resources>
代码语言:txt
复制
<mah:MetroWindow.RightWindowCommands>
代码语言:txt
复制
    <mah:WindowCommands>
代码语言:txt
复制
        <Button x:Name="cmdMinimize"
代码语言:txt
复制
                Style="{StaticResource WindowMinimizeButton}" />
代码语言:txt
复制
        <Button x:Name="cmdMaximize"
代码语言:txt
复制
                Style="{StaticResource WindowMaximizeButton}" />
代码语言:txt
复制
        <Button x:Name="cmdExit"
代码语言:txt
复制
                Style="{StaticResource WindowExitButton}" />
代码语言:txt
复制
    </mah:WindowCommands>
代码语言:txt
复制
</mah:MetroWindow.RightWindowCommands>
代码语言:txt
复制
<Grid>
代码语言:txt
复制
    <Grid.ColumnDefinitions>
代码语言:txt
复制
        <ColumnDefinition Width="*" />
代码语言:txt
复制
        <ColumnDefinition Width="auto" />
代码语言:txt
复制
    </Grid.ColumnDefinitions>
代码语言:txt
复制
    <Grid.RowDefinitions>
代码语言:txt
复制
        <RowDefinition Height="auto" />
代码语言:txt
复制
        <RowDefinition Height="*" />
代码语言:txt
复制
    </Grid.RowDefinitions>
代码语言:txt
复制
    <Grid Grid.Column="0" Grid.ColumnSpan="2" Grid.Row="1" Panel.ZIndex="1">
代码语言:txt
复制
        <Grid.ColumnDefinitions>
代码语言:txt
复制
            <ColumnDefinition Width="*" />
代码语言:txt
复制
        </Grid.ColumnDefinitions>
代码语言:txt
复制
        <Grid.RowDefinitions>
代码语言:txt
复制
            <RowDefinition Height="auto" />
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

领券