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

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

2024.05.19
XML
カテゴリ: C#.NET


C#でWPFアプリケーションをMVVMパターンで構築する場合、テキストボックスの入力や変更をバインディングで管理します。以下は、基本的なMVVMパターンを使用してテキストボックスの入力をバインディングするサンプルコードです。


### プロジェクトの構成

1. **Model**: データの定義。


3. **View**: UIの定義。


### 1. Model

モデルはシンプルなクラスで、特に変更通知プロパティが必要な場合は`INotifyPropertyChanged`を実装します。


```csharp

using System.ComponentModel;


namespace WpfAppSample

{

    public class Person : INotifyPropertyChanged

    {

        private string _name;

        public string Name

        {

            get { return _name; }

            set

            {

                if (_name != value)

                {

                    _name = value;

                    OnPropertyChanged(nameof(Name));

                }

            }

        }


        public event PropertyChangedEventHandler PropertyChanged;

        protected void OnPropertyChanged(string propertyName)

        {

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

        }

    }

}

```


### 2. ViewModel

ビューモデルはモデルをラップし、UIとのバインディングを提供します。


```csharp

using System.ComponentModel;


namespace WpfAppSample

{

    public class MainViewModel : INotifyPropertyChanged

    {

        private Person _person;


        public MainViewModel()

        {

            _person = new Person();

        }


        public string Name

        {

            get { return _person.Name; }

            set

            {

                if (_person.Name != value)

                {

                    _person.Name = value;

                    OnPropertyChanged(nameof(Name));

                }

            }

        }


        public event PropertyChangedEventHandler PropertyChanged;

        protected void OnPropertyChanged(string propertyName)

        {

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

        }

    }

}

```


### 3. View

XAMLでUIを定義し、バインディングを設定します。


```xml

<Window x:Class="WpfAppSample.MainWindow"

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

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

        Title="MainWindow" Height="200" Width="300">

    <Window.DataContext>

        <local:MainViewModel />

    </Window.DataContext>

    <Grid>

        <TextBox Text="{Binding Name, UpdateSourceTrigger=PropertyChanged}" Width="200" Height="30" Margin="10"/>

    </Grid>

</Window>

```


### 4. MainWindowコードビハインド

コードビハインドは基本的に自動生成された部分だけです。


```csharp

using System.Windows;


namespace WpfAppSample

{

    public partial class MainWindow : Window

    {

        public MainWindow()

        {

            InitializeComponent();

        }

    }

}

```


### 説明

- **Model**: `Person`クラスは名前を保持し、変更通知を行います。

- **ViewModel**: `MainViewModel`クラスは、`Person`オブジェクトを管理し、プロパティ変更を通知します。

- **View**: XAMLで定義された`TextBox`は、`MainViewModel`の`Name`プロパティにバインドされています。`UpdateSourceTrigger=PropertyChanged`は、テキストが変更されるたびにプロパティを更新することを指定します。


これにより、テキストボックスに入力された内容が即座に`ViewModel`の`Name`プロパティに反映され、逆もまた同様です。






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

Last updated  2024.05.19 18:05:09


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

© Rakuten Group, Inc.
Mobilize your Site
スマートフォン版を閲覧 | PC版を閲覧
Share by: