「東雲 忠太郎」の平凡な日常のできごと

「東雲 忠太郎」の平凡な日常のできごと

2024.03.31
XML
カテゴリ: C#.NET


MVVM (Model-View-ViewModel) パターンは、WPF (Windows Presentation Foundation) アプリケーションの開発で広く使用されています。以下に、C# WPF アプリケーションで MVVM パターンを使用するサンプルコードを示します。


まず、モデル (Model) クラスを定義します。


```csharp

using System.ComponentModel;


namespace MVVMExample.Models

{

    public class Person : INotifyPropertyChanged

    {

        private string name;

        public string Name

        {

            get { return name; }

            set

            {

                if (name != value)

                {

                    name = value;

                    OnPropertyChanged(nameof(Name));

                }

            }

        }


        private int age;

        public int Age

        {

            get { return age; }

            set

            {

                if (age != value)

                {

                    age = value;

                    OnPropertyChanged(nameof(Age));

                }

            }

        }


        public event PropertyChangedEventHandler PropertyChanged;


        protected virtual void OnPropertyChanged(string propertyName)

        {

            PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));

        }

    }

}

```


次に、ビューモデル (ViewModel) クラスを定義します。


```csharp

using System.Windows.Input;

using MVVMExample.Models;

using System.ComponentModel;

using System.Windows;


namespace MVVMExample.ViewModels

{

    public class MainViewModel : INotifyPropertyChanged

    {

        private Person person;


        public MainViewModel()

        {

            person = new Person();

            // デフォルト値の設定

            person.Name = "John Doe";

            person.Age = 30;


            // コマンドの初期化

            UpdateCommand = new RelayCommand(UpdatePerson);

        }


        public Person Person

        {

            get { return person; }

            set

            {

                if (person != value)

                {

                    person = value;

                    OnPropertyChanged(nameof(Person));

                }

            }

        }


        public ICommand UpdateCommand { get; private set; }


        private void UpdatePerson(object parameter)

        {

            MessageBox.Show($"Name: {person.Name}, Age: {person.Age}");

        }


        public event PropertyChangedEventHandler PropertyChanged;


        protected virtual void OnPropertyChanged(string propertyName)

        {

            PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));

        }

    }

}

```


そして、View (UI) の XAML を作成します。


```xml

<Window x:Class="MVVMExample.MainWindow"

        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"

        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"

        xmlns:local="clr-namespace:MVVMExample.ViewModels"

        Title="MVVM Example" Height="200" Width="300"

        DataContext="{Binding Source={StaticResource Locator}, Path=MainViewModel}">

    <Grid>

        <StackPanel Margin="10">

            <TextBlock Text="Name:"/>

            <TextBox Text="{Binding Person.Name, UpdateSourceTrigger=PropertyChanged}" Margin="0 0 0 10"/>

            <TextBlock Text="Age:"/>

            <TextBox Text="{Binding Person.Age, UpdateSourceTrigger=PropertyChanged}" Margin="0 0 0 10"/>

            <Button Content="Update" Command="{Binding UpdateCommand}"/>

        </StackPanel>

    </Grid>

</Window>

```


最後に、アプリケーションの起動時にビューモデルをインスタンス化するための App.xaml.cs を設定します。


```csharp

using System.Windows;


namespace MVVMExample

{

    public partial class App : Application

    {

        protected override void OnStartup(StartupEventArgs e)

        {

            base.OnStartup(e);

            MainWindow mainWindow = new MainWindow();

            mainWindow.Show();

        }

    }

}

```


このサンプルコードでは、MVVM パターンを使用して、モデル、ビューモデル、および View を定義しています。ビューモデルはビュー (UI) とモデルの間の仲介役として機能し、ビジネスロジックを実装します。ビューはビューモデルをデータコンテキストとしてバインドし、データバインディングとコマンドバインディングを使用してビューモデルとの通信を行います。






お気に入りの記事を「いいね!」で応援しよう

Last updated  2024.03.31 14:49:03


【毎日開催】
15記事にいいね!で1ポイント
10秒滞在
いいね! -- / --
おめでとうございます!
ミッションを達成しました。
※「ポイントを獲得する」ボタンを押すと広告が表示されます。
x

© Rakuten Group, Inc.
X
Create a Mobile Website
スマートフォン版を閲覧 | PC版を閲覧
Share by: