前提
仕事で使用しているC#のWPFの勉強の際に問題に直面したので質問させていただきます。
実現したいこと
実現したいことはボタンをクリック後にテキストブロック内に指定の文字列を表示することです。
WPF
MVVM構成
XAML
View.csとViewModel.csのみしか使用しない
Viewにはこれ以上の実装はしない。
ViewmoModel内だけで実装したい
発生している問題・エラーメッセージ
エラーは発生していません。 デバックした際に望んだ値は取得できています。 ただ、textblock内に表示だけができていません。
該当のソースコード
ViewModel
using System.Diagnostics; using System; using System.Windows.Input; using System.ComponentModel; namespace WpfSample2Button { public class MainViewModel : INotifyPropertyChanged { public TestText Text { get; set; } public event PropertyChangedEventHandler PropertyChanged; MainViewModel mainViewModel = new MainViewModel(); protected virtual void OnPropertyChanged(string name) { PropertyChanged(this, new PropertyChangedEventArgs(name)); } class MyCommand : ICommand { private Action<object> _action; public event EventHandler CanExecuteChanged; public MyCommand(Action<object> action) { _action = action; } public bool CanExecute(object parameter) { return true; } public void Execute(object parameter) { _action(parameter); // parameterはnull } public void RaiseCanExecuteChanged() => CanExecuteChanged?.Invoke(this, EventArgs.Empty); } private ICommand _okButton; public ICommand OkButton { get { return _okButton = new MyCommand((o) => { mainViewModel.PutText= new Text( new TestText { PutText = "hoge" }); OnPropertyChanged("getText"); } ); } } public class TestText { public string _putText; public string PutText { get { _putText; } set { _putText = Value; } } } public MainViewModel() { } } }
該当のソースコード
XAML
<Window x:Class="WpfSample2Button.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:local="clr-namespace:WpfSample2Button" mc:Ignorable="d" Title="MainWindow" Height="450" Width="800"> <Grid> <Button Content="OK" Command="{Binding OkButton}" Width = "50" Height = "50" /> </Grid> <Grid> <TextBlock Content="Text" Text="{Binding PutText Mode="OneWay" UpdateSourceTrigger=PropertyChanged}" Width = "50" Height = "50" /> </Grid> </Window>
試したこと
値を渡す先のプロパティの変更通知(OnPropertyChanged)を実装しました。
ここも通るのですがOnPropertyChangedメソッド内のPropertyChangedがnullなのが気になってます。
今回のコードには不要だと思い記載はしておりませんが、そのほかにDateGrid内を選択すると選択対象の値を他のDateGrid内に表示するということをしています。
その内にもこのOnPropertyChangedでプロパティの変更通知をし完了しており
OnPropertyChangedメソッド内のPropertyChangedはnullではありませんでした。
補足情報(FW/ツールのバージョンなど)
TextBlockのTextプロパティ(getText)にバインドしています
まだ回答がついていません
会員登録して回答してみよう