이것이 내 시나리오입니다. 표준 int 속성을 가진 내부 클래스가 있습니다.WPF에서 데이터 바인딩에 대한 속성 노출
public class Session : INotifyPropertyChanged {
public event PropertyChangedEventHandler PropertyChanged;
private ushort _Level;
public ushort Level
{
get { return _Level; }
}
private void OnPropertyChanged(string name)
{
if (PropertyChanged != null)
PropertyChanged(this, new PropertyChangedEventArgs(name));
}
// a timer code here updates the _Level property every 60 seconds
// and calls OnPropertyChange("Level");
}
내 UI 창에서 세션 인스턴스에 바인딩하고 레벨 값을 표시하는 레이블이 있습니다. 당신이 추측 수있는, 내가 _level의 값을 업데이트 할 때 UI가 된 본체를 업데이트하지 않습니다, 그러나
public MyWindow()
{
SessionInstance = new Session();
this.InitializeComponent();
}
public Session SessionInstance { get; set; }
:
<TextBlock Name="LevelTextBlock" Text="{Binding SessionInstance.Level, StringFormat='0%'}" />
그리고 윈도우 생성자는이 코드를 가지고있다. Session 클래스 내에 DependancyProperty를 추가하는 것은 용납되지 않습니다. 창에서이 작업을 수행 할 수는 있지만 값을 Session 인스턴스로 다시 확인하는 알리미가 필요합니다. 이 작업을 수행하는 우아한 방법이 있는지 궁금합니다. 나는 아무것도 생각할 수 없다. 텍스트 블럭 값을 검사하고 새로 고치는 창에서 다른 타이머를 실행하는 것. 의견이 있으십니까?
이 내용을 추가했지만 아직 업데이트되지 않았습니다. 편집을 표시하기 위해 원본 코드를 편집합니다. –
레벨 설정 기에서 OnPropertyChanged를 수동으로 호출하거나 내가 작성한 NotifyPropertyWeaver를 사용해야합니다. 올바르게 실행되었는지 확인하십시오. 빌드 출력 로그에 몇 줄을 추가합니다. –
데이터 컨텍스트를 설정할 위치가 표시되지 않습니다. 창에 데이터 컨텍스트를 설정해야합니다. this.DataContext = this; –