

BlockColumnPosition1プロパティが変更されたときにXamlにプロパティ変更を通知したいのですが、OnPropertyChangedメソッド内でPropertyChangedがnullになってしまい通知されません。このif文さえ通ってしまえば通知されると思うのですが・・・。  
初歩的な質問ですが、ご教示ください。

[code]

    public partial class MainWindow : Window, INotifyPropertyChanged
    {
        public MainWindow()
        {
            InitializeComponent();
            GenerateBlock();
        }
    
        internal enum PropertyNames
        {
            BlockColumnPosition1,
            BlockRowPosition1,
        }
    
    
        /// <summary>
        /// ブロック位置（列）
        /// </summary>
        private Int32 blockColumnPosition;
    
        /// <summary>
        /// ブロック位置（行）
        /// </summary>
        private Int32 blockRowPosition;
    
    
        /// <summary>
        /// ブロック位置（列）を取得・設定します。
        /// </summary>
        private Int32 BlockColumnPosition1
        {
            get
            {
                return this.blockColumnPosition;
            }
            set
            {
                this.blockColumnPosition = value;
                this.OnPropertyChanged(PropertyNames.BlockColumnPosition1.ToString());
            }
        }
    
        /// <summary>
        /// ブロック位置（行）を取得・設定します。
        /// </summary>
        private Int32 BlockRowPosition1
        {
            get
            {
                return this.blockRowPosition;
            }
            set
            {
                this.blockRowPosition = value;
                this.OnPropertyChanged(PropertyNames.BlockRowPosition1.ToString());
            }
        }
    
    
        private void GenerateBlock()
        {
            BlockColumnPosition1 = 5;
            BlockRowPosition1 = 1;
        }
    
        public event PropertyChangedEventHandler PropertyChanged;
        protected void OnPropertyChanged(String propertyName)
        {
            if (PropertyChanged != null)
                PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
        }
    
    
    }
    
[/code]


CC BY-SA 3.0
2017-10-20T14:46:13.220
38914
2018-06-07T02:48:59.067
2017-10-20T15:30:06.617
76
25862
question
c#
OnPropertyChangedでXamlにプロパティ変更を通知したい


第一に`INotifyPropertyChanged`(この場合は`MainWindow`)は作るだけではなく、ビューにバインドしなければなりません。質問のコードでいうと`DataContext`に`this`を設定すると原理的には`PropertyChanged`が使用されます。

次に`MainWindow`は`DependencyObject`を継承していますので、`INotifyPropertyChanged`ではなく依存関係プロパティの仕組みを使うべきです。`Visual
Studio`のC#エディター上で`propdp`と入力すると雛形が挿入されますので、それを利用してプロパティを定義してください。

最後に`MainWindow`内で`MainWindow`のプロパティにバインドするのであれば、`RelativeSource`を使用することができます。

なおプロパティ名の`string`を得たい場合は`nameof(BlockColumnPosition1)`のように参照するのが簡単です。さらにいえば`[CallerMemberName]`を使用すると名前を明記する必要はなくなります。


CC BY-SA 3.0
2017-10-20T15:29:27.563
38915
2017-10-20T15:29:27.563
5750
38914
answer