당신이 당신의 클래스를 변경하는 경우 귀하의 코드가 작동합니다 이에 ...
public partial class Window1 : Window, INotifyPropertyChanged
{
private int _idCounter;
public int IdCounter
{
get { return _idCounter; }
set
{
if (value != _idCounter)
{
_idCounter = value;
OnPropertyChanged("IdCounter");
}
}
}
public Window1()
{
InitializeComponent();
myLabel.SetBinding(ContentProperty, new Binding("IdCounter"));
DataContext = this;
}
private void Button_Click(object sender, RoutedEventArgs e)
{
e.Handled = true;
IdCounter++;
}
#region INotifyPropertyChanged Implementation
public event PropertyChangedEventHandler PropertyChanged;
protected virtual void OnPropertyChanged(string name)
{
var handler = System.Threading.Interlocked.CompareExchange(ref PropertyChanged, null, null);
if (handler != null)
{
handler(this, new PropertyChangedEventArgs(name));
}
}
#endregion
}
당신이 가지고 있던 문제의 일부
...
창 자체가 INotifyPropertyChanged를 구현하여 바인딩 엔진이 귀를 처리 할 수 있도록해야합니다.
IdCounter는 공용이어야하며 바인딩 엔진이이를 가져올 수 있도록 공개 게터가 있어야합니다.
IdCounter (이 경우 MainWindow)를 선언 한 모든 클래스에 DataContext를 설정해야합니다. 문제의 일부는 바인딩 엔진에 DataContext가 없다는 것입니다.
BindingMode 설정은 레이블이 기본적으로 해당 방식으로 바인딩되기 때문에 빨간색 청어입니다.
레이블의 내용에 원본 속성을 업데이트하는 메커니즘이 없으므로 UpdateSourceTrigger는 빨간색 청어입니다. 레이블의 내용은 사용자가 코드에서 알아야하는 내용을 입력 할 수있는 텍스트 상자와 다릅니다. 사용자가 변경할 수없는 항목에 바인딩하는 경우 UpdateSourceTrigger를 잊어 버리면 대상 속성이 중요합니다.
처리기가 이벤트를 표시해야합니다. 이는 좋은 습관이며 바인딩에 영향을주지 않습니다.
바인딩 생성자는 경로 만 있으면됩니다.
이 코드는 예상되는 결과를 제공합니다. 즉, 버튼이 클릭 될 때 라벨이 갱신된다는 것이다. 확인, 컴파일 및 vs2013, .net 4.5에서 실행.
다른 응답자는 당신이보기 모델을 사용해야한다고 말했습니다. 이 100 %에 동의하며 전체적으로 고려하는 것이 좋습니다.
기술적으로 당신의 객체는 INotifyPropertyChange에서 상속받지 않습니다. 그들은 그것을 구현합니다. 그래도 좋은 대답. –
@JohnathonSullinger, 기민한 머리가 와줘서 고마워. 내가 편집 할게. 고마워 –