Laravel  
laravel
文档
数据库
架构
入门
php技术
    
Laravelphp
laravel / php / java / vue / mysql / linux / python / javascript / html / css / c++ / c#

c# mvvm

作者:邪天血战   发布日期:2026-05-14   浏览:56

using System;
using System.Collections.ObjectModel;
using System.ComponentModel;
using System.Runtime.CompilerServices;
using System.Windows.Input;

namespace MVVMExample
{
    // Model
    public class Person
    {
        public string FirstName { get; set; }
        public string LastName { get; set; }
    }

    // ViewModel
    public class MainViewModel : INotifyPropertyChanged
    {
        private ObservableCollection<Person> _people;
        private Person _selectedPerson;
        private ICommand _addCommand;

        public ObservableCollection<Person> People
        {
            get { return _people; }
            set
            {
                _people = value;
                OnPropertyChanged();
            }
        }

        public Person SelectedPerson
        {
            get { return _selectedPerson; }
            set
            {
                _selectedPerson = value;
                OnPropertyChanged();
            }
        }

        public ICommand AddCommand
        {
            get
            {
                if (_addCommand == null)
                {
                    _addCommand = new RelayCommand(param => this.AddPerson());
                }
                return _addCommand;
            }
        }

        public MainViewModel()
        {
            People = new ObservableCollection<Person>();
        }

        private void AddPerson()
        {
            People.Add(new Person { FirstName = "John", LastName = "Doe" });
        }

        public event PropertyChangedEventHandler PropertyChanged;

        protected void OnPropertyChanged([CallerMemberName] string name = null)
        {
            PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(name));
        }
    }

    // RelayCommand (for commanding in MVVM)
    public class RelayCommand : ICommand
    {
        private readonly Action<object> _execute;
        private readonly Func<object, bool> _canExecute;

        public RelayCommand(Action<object> execute, Func<object, bool> canExecute = null)
        {
            _execute = execute;
            _canExecute = canExecute;
        }

        public bool CanExecute(object parameter)
        {
            return _canExecute == null || _canExecute(parameter);
        }

        public void Execute(object parameter)
        {
            _execute(parameter);
        }

        public event EventHandler CanExecuteChanged
        {
            add { CommandManager.RequerySuggested += value; }
            remove { CommandManager.RequerySuggested -= value; }
        }
    }

    // View (XAML)
    /*
    <Window x:Class="MVVMExample.MainWindow"
            xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
            xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
            Title="MainWindow" Height="350" Width="525">
        <Grid>
            <ListView ItemsSource="{Binding People}" SelectedItem="{Binding SelectedPerson}">
                <ListView.View>
                    <GridView>
                        <GridViewColumn Header="First Name" DisplayMemberBinding="{Binding FirstName}" />
                        <GridViewColumn Header="Last Name" DisplayMemberBinding="{Binding LastName}" />
                    </GridView>
                </ListView.View>
            </ListView>
            <Button Content="Add Person" Command="{Binding AddCommand}" HorizontalAlignment="Right" VerticalAlignment="Bottom" Width="100" Margin="0,0,10,10"/>
        </Grid>
    </Window>
    */
}

解释说明

  1. Model: Person 类表示数据模型,包含 FirstNameLastName 属性。
  2. ViewModel: MainViewModel 类实现了 INotifyPropertyChanged 接口,用于通知 UI 更新。它包含一个 ObservableCollection<Person> 集合 People 和一个 SelectedPerson 属性,以及一个命令 AddCommand 用于添加新的人。
  3. RelayCommand: 实现了 ICommand 接口,用于处理命令逻辑。它允许你将命令绑定到按钮或其他控件上。
  4. View: XAML 代码片段展示了如何在 WPF 应用程序中使用 ListView 显示 People 集合,并通过 Button 触发 AddCommand

这个示例展示了如何使用 C# 和 WPF 实现 MVVM 模式的基本结构。

上一篇:c# 对象转换json

下一篇:c# ^

大家都在看

c# 二进制

c# 创建目录

c# socket服务端连接多个客户端

c# datatable group by

c# tcp client

c# type.gettype

c# sqlconnection

c# string.format 小数位数

c# invoke方法

.net和c#

Laravel PHP 深圳智简公司。版权所有©2023-2043 LaravelPHP 粤ICP备2021048745号-3

Laravel 中文站