Visual Studio/WPF > error > 오류 CS0535'Person'은 인터페이스 멤버 'INotifyPropertyChanged.PropertyChanged'를 구현하지 않습니다.

Visual Studio 2017 Community (以下VS)
Windows 7 Pro (32bit)

참고 : h tp // w w. 오 t r t. 이. jp / ai t / archi c0s / 0905/19 / 네 ws145_3. HTML

위의 코드를 사용하는 과정에서 나온 오류에 대해.

코드와 오류



MainWindow.xaml.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;

//
using System.ComponentModel; 

namespace _170061_t1520_binding_twoway
{
    /// <summary>
    /// MainWindow.xaml の相互作用ロジック
    /// </summary>
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
        }

        private void MainPanel_Loaded(object sender, RoutedEventArgs e)
        {
            MainPanel.DataContext = new Person();
        }

        private void Button_Click(object sender, RoutedEventArgs e)
        {
            ((Person)MainPanel.DataContext).Calculate();
        }
    }

    class Person : INotifyPropertyChanged
    {
        public double Height { get; set; }
        public double Weight { get; set; }
        public double Bmi { get; private set; }

        public void Calculate()
        {
            Bmi = Weight / Math.Pow(Height, 2);
        }
    }

}

다음 오류가 발생했습니다.

심각도 수준 코드 설명 프로젝트 파일 행 억제 상태
오류 CS0535 'Person'이 인터페이스 멤버 'INotifyPropertyChanged.PropertyChanged'를 구현하지 않습니다. 170061_t1520_binding_twoway c:\users\administrator\documents\visual studio 2017\Projects\170061_t1520_binding_twoway\170061_t1520_binding_twoway\MainWindow.xaml.cs

대처



다음을 클래스에 추가한다.
 public event PropertyChangedEventHandler PropertyChanged;

  protected virtual void OnPropertyChanged(string propertyName)
  {
    PropertyChangedEventHandler handler = this.PropertyChanged;
    if (handler != null)
      handler(this, new PropertyChangedEventArgs(propertyName));
  }

모든 코드



MainWindow.xaml
<Window x:Class="_170061_t1520_binding_twoway.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:_170061_t1520_binding_twoway"
        mc:Ignorable="d"
        Title="MainWindow" Height="350" Width="525">
    <Grid>
        <StackPanel x:Name="MainPanel" Loaded="MainPanel_Loaded">
            <TextBox Margin="10" Text="{Binding Height, Mode=TwoWay}"/>
            <TextBox Margin="10" Text="{Binding Weight, Mode=TwoWay}"/>
            <Button Margin="10" Content="計算" Click="Button_Click"/>
            <TextBlock Margin="10" Text="{Binding Bmi, Mode=OneWay}"/>
        </StackPanel>

    </Grid>
</Window>

MainWindow.xaml.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;

//
using System.ComponentModel; 

namespace _170061_t1520_binding_twoway
{
    /// <summary>
    /// MainWindow.xaml の相互作用ロジック
    /// </summary>
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
        }

        private void MainPanel_Loaded(object sender, RoutedEventArgs e)
        {
            MainPanel.DataContext = new Person();
        }

        private void Button_Click(object sender, RoutedEventArgs e)
        {
            ((Person)MainPanel.DataContext).Calculate();
        }
    }

    class Person : INotifyPropertyChanged
    {
        double _bmi;

        public double Height { get; set; }
        public double Weight { get; set; }
        public double Bmi
        {
            get { return _bmi; }
            private set
            {
                _bmi = value;
                OnPropertyChanged("Bmi");
            }
        }

        public void Calculate()
        {
            Bmi = Weight / Math.Pow(Height, 2);
        }

        public event PropertyChangedEventHandler PropertyChanged;

        protected virtual void OnPropertyChanged(string propertyName)
        {
            PropertyChangedEventHandler handler = this.PropertyChanged;
            if (handler != null)
                handler(this, new PropertyChangedEventArgs(propertyName));
        }
    }

}

(주의:Person의 선언은 상기와 같은 장소에 두는 것은 좋지 않을 것이다.)



오류 메시지 정보



xxx를 구현하지 않음



'class' does not implement interface member 'member'

A class derived from an interface, but the class did not implement one or more of the interface's members. A class must implement all members of interfaces from which it derives or else be declared

does not를 「구현하지 않습니다」라고 하는 역으로 해 버리고 있다.

"xxx가 구현되지 않았습니다."
또는
"xxx를 구현하십시오."
하지만 IDE 사용자에게 적절한 오류 메시지를 생각합니다.

Error Message Guidelines

What can the user do to prevent it from happening again?

좋은 웹페이지 즐겨찾기