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?
Reference
이 문제에 관하여(Visual Studio/WPF > error > 오류 CS0535'Person'은 인터페이스 멤버 'INotifyPropertyChanged.PropertyChanged'를 구현하지 않습니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/7of9/items/ef2454254de5315a0037텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)