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

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

2024.03.28
XML
カテゴリ: C#.NET


ViewModelから直接TextBoxを操作することは、通常のMVVMパターンでは推奨されません。ViewModelはビジネスロジックを持ち、Viewに依存しないことが重要です。その代わりに、ViewModelはデータを保持し、Viewはそのデータをバインドして表示します。


ただし、ViewModelからView(具体的にはTextBox)を操作する必要がある場合もあります。そのような場合は、代わりにコマンドパターンを使用して、Viewに対して操作をトリガーすることが一般的です。


以下に、ViewModelからTextBoxを操作する方法を示します。


```csharp

using System.Windows.Controls;

using System.Windows.Input;


public class MainViewModel

{

    // TextBoxのテキストを変更するコマンド

    public ICommand ChangeTextCommand { get; private set; }


    public MainViewModel()

    {

        ChangeTextCommand = new RelayCommand(ChangeText);

    }


    private void ChangeText()

    {

        // テキストボックスの内容を変更するロジック

        // ここでは、ViewModel内のプロパティを使用していますが、

        // 実際のアプリケーションでは、データソースからのデータを使用することが一般的です

        Text = "New Text";

    }


    // ViewModel内のプロパティ

    private string _text;

    public string Text

    {

        get { return _text; }

        set

        {

            _text = value;

            // INotifyPropertyChangedイベントを発生させ、バインディングを更新します

            OnPropertyChanged(nameof(Text));

        }

    }


    // INotifyPropertyChanged インターフェースの実装

    public event PropertyChangedEventHandler PropertyChanged;

    protected virtual void OnPropertyChanged(string propertyName)

    {

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

    }

}

```


ViewのXAMLファイルでは、ChangeTextCommandを実行するためのトリガーとして、TextBoxにバインディングします。


```xml

<TextBox Text="{Binding Text}" Width="200"/>

<Button Content="Change Text" Command="{Binding ChangeTextCommand}"/>

```


このコードでは、ViewModelの `ChangeText` メソッドが呼び出されると、`Text` プロパティが変更され、それがTextBoxにバインドされた結果、TextBoxの内容が変更されます。






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

Last updated  2024.03.28 04:39:38


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

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