2013-09-19 3 views
1

В моем приложении WPF я хочу, чтобы объект «CaseDetails» использовался глобально, то есть всеми пользовательскими элементами управления окнами &. CaseDetails реализует INotifyPropertyChanged и имеет свойство CaseName.Wpf Связывание объекта TextBlock с элементом приложения

public class CaseDetails : INotifyPropertyChanged 
{ 
    private string caseName, path, outputPath, inputPath; 

    public CaseDetails() 
    { 
    } 

    public string CaseName 
    { 
     get { return caseName; } 
     set 
     { 
      if (caseName != value) 
      { 
       caseName = value; 
       SetPaths(); 
       OnPropertyChanged("CaseName"); 
      } 
     } 
    } 
    protected virtual void OnPropertyChanged(string propertyName) 
    { 
     PropertyChangedEventHandler handler = PropertyChanged; 
     if (handler != null) 
      handler(this, new PropertyChangedEventArgs(propertyName)); 
    } 

    public event PropertyChangedEventHandler PropertyChanged; 

В моем App.xaml.cs, я создал объект CaseDetails

public partial class App : Application 
{ 
    private CaseDetails caseDetails; 

    public CaseDetails CaseDetails 
    { 
     get { return this.caseDetails; } 
     set { this.caseDetails = value; } 
    } 

В одном из моего кода управления пользователя позади, я создаю объект CaseDetails и установить в App классе

(Application.Current as App).CaseDetails = caseDetails; 

И обновлен объект CaseDetails класса App.

В моем MainWindow.xml у меня есть TextBlock, который привязан к свойству CaseName CaseDetails. Этот текстовый блок не обновляется. Код xml:

<TextBlock Name="caseNameTxt" Margin="0, 50, 0, 0" FontWeight="Black" TextAlignment="Left" Width="170" Text="{Binding Path=CaseDetails.CaseName, Source={x:Static Application.Current} }"/> 

Почему этот текст TextBlock Text не обновляется ?? Где я ошибаюсь в привязке?

ответ

3

Связывание не обновляется, потому что вы устанавливаете свойство CaseDetails в своем классе App, который не реализует INotifyPropertyChanged.

Либо вы также реализовать INotifyPropertyChanged в вашем классе App, или вы просто установить свойство существующего CaseDetails например:

(Application.Current as App).CaseDetails.CaseName = caseDetails.CaseName; 
... 

Свойство CaseDetails может затем быть только для чтения:

public partial class App : Application 
{ 
    private readonly CaseDetails caseDetails = new CaseDetails(); 

    public CaseDetails CaseDetails 
    { 
     get { return caseDetails; } 
    } 
} 
+0

Я попытался сделать CaseDetails так как он только что работал и работал, но это не имело никакого значения. Наконец, я попытался реализовать класс INotifyPropertyChanged в App, и это привело к обновлению привязки. благодаря – Tvd

Смежные вопросы