2016-10-30 4 views
0

나는 이것이 끔찍한 공통적 인 문제임을 알고 있지만 buttonContent의 "Default"를 변경할 때 "Pressed1"및 "Pressed2"콘텐츠로 업데이트하는 버튼을 얻을 수 없다는 것을 알고 있습니다. 몇 가지 질문 보았다 데, 내가 나를 위해 일하려는 답변을 찾을 수없는, 단순히 여기에 어떤 문제가 있는지 알 수 없기 때문에 여기에 엉터리 코드입니다 : 버튼과WPF 데이터 바인딩, 값이 업데이트되지 않음

public partial class MainWindow : Window 
{ 
    Code_Behind cB; 
    public MainWindow() 
    { 
     cB = new Code_Behind(); 
     this.DataContext = cB; 
     InitializeComponent(); 
    } 
    private void button_Click(object sender, RoutedEventArgs e) 
    { 
     cB.buttonPressed(); 
    } 
} 

그리고 여기에는 별도의 클래스

public class Code_Behind : INotifyPropertyChanged 
{ 
    public event PropertyChangedEventHandler PropertyChanged; 
    private string _buttonContent = "Default"; 
    public string buttonContent 
    { 
     get { return _buttonContent; } 
     set { 
       if (_buttonContent != value) 
        { 
         buttonContent = value; 
         OnPropertyChanged("buttonContent"); 
        } 
      } 
    } 
    public void buttonPressed() 
    { 
     int timesPressed = 0; 
     if (timesPressed != 1) 
     { 
       _buttonContent = "Pressed1"; 
       timesPressed++; 
     } 
     else if (timesPressed != 2) 
     { 
       _buttonContent = "Pressed2"; 
       timesPressed++; 
       timesPressed = 0; 
     } 
    } 
    protected void OnPropertyChanged(string name) 
    { 
     PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(name)); 
    } 
} 

답변

0

당신은 속성을 설정되지 않고 백업 필드입니다. 따라서 PropertyChanged 이벤트가 발생하지 않습니다.

그 외에

buttonContent = "Pressed1"; 
... 
buttonContent = "Pressed2"; 

으로

_buttonContent = "Pressed1"; 
... 
_buttonContent = "Pressed2"; 

바꾸기 것이 널리 받아 파스칼 케이싱 속성 이름을 쓰는 규칙, 즉 ButtonContent 대신 buttonContent이다.

또한 속성 설정자가 이상하게 보입니다 (한 줄에 너무 많은 코드를 넣으려고 시도했을 가능성이 큽니다). 대신

set 
{ 
    if (_buttonContent != value) 
    { 
     _buttonContent = value; 
    } 
    OnPropertyChanged("buttonContent"); 
} 

확실히

set 
{ 
    if (_buttonContent != value) 
    { 
     _buttonContent = value; 
     OnPropertyChanged("buttonContent"); 
    } 
} 
+0

네, 실제로 보인다 여기 문제입니다해야합니다. 글쎄, 그것은 정확하게 속성이 처음에 어떻게 작동하는지 설명하지 못했습니다. 클래스의 객체 인스턴스에 바인딩하는 것과 클래스에 바인딩하는 것 사이에 차이가 있습니까? – Zephylir

+1

"클래스에 직접 바인딩"은 클래스 (즉 정적) 속성에 바인딩하는 것을 의미합니까? 여기에서 읽으십시오 : [데이터 바인딩 개요] (https://msdn.microsoft.com/en-us/library/ms752347(v=vs.110) .aspx). – Clemens

+0

그런데 "별도의 클래스"(Code_Behind라고 함)는 일반적으로 MVVM 아키텍처 패턴에서 뷰 모델 *이라고 부릅니다. – Clemens

관련 문제