как установить привязку для метки в wpf - PullRequest
0 голосов
/ 11 августа 2011

Мне нужно привязать свойство к метке.я написал следующий код: xaml для метки:

<Label Canvas.Left="807.3" Canvas.Top="148.9" Height="33.567" x:Name="label2"
       Width="98" FontFamily="Tw Cen MT" FontSize="24" FontWeight="Bold"
       Foreground="#FFFEE3A4"
       Content="{Binding Path=UserInformation.AccountBalance,Mode=OneWay}">
    <Label.Background>
        <ImageBrush />
    </Label.Background>
</Label>

Класс, у которого есть AccountBalance

public class CustomerInformation : INotifyPropertyChanged
    {
        public CustomerInformation()
        {
            _Balance = 0.0;
        }

        #region INotifyPropertyChanged Members
        public event PropertyChangedEventHandler PropertyChanged;
        #endregion

 public double AccountBalance
        {
            get { return _Balance; } 
        set 
        {
            _wepaBalance = value;
            FirePropertyChanged("AccountBalance");
        } 

        }

 protected void FirePropertyChanged(string propertyName)
        {
            if (this.PropertyChanged != null)
            {
                this.PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
            }
        }
}

datacontext, установлен так, как показано ниже.DataContext = this;

за xaml.cs. Следующий код написан для доступа к UserInfo, который является глобальным объектом.

public CustomerInformation UserInformation
        {
            get
            {

                return Globalobjs._Object.UserInfo;
            }
        }

xamls.cs является производным только от Window.

Проблема в том, что PropertyChangedEventHandler из INotifyPropertyChanged всегда имеет значение null при вызове.

Может ли кто-нибудь 1 помочь мне в этом вопросе?

Ответы [ 3 ]

2 голосов
/ 12 августа 2011
this.LayoutRoot.DataContext = this; 

Это Window, но вы устанавливаете экземпляр Window как DataContext. Установите DataContext на UserInformation.

this.LayoutRoot.DataContext = Globalobjs._Object.UserInfo;
0 голосов
/ 12 августа 2011

Вы привязываетесь к DataContext Windows. Но Windows DataContext - это не то же самое, что код Windows, где вы определили свойство UserInformation. Чтобы получить доступ к свойству, определенному в коде вашего окна, вы должны установить свойство Name вашего окна, а затем использовать следующую привязку:

Content="{Binding ElementName=YourWindowName, Path=UserInformation.AccountBalance,Mode=OneWay}"
0 голосов
/ 11 августа 2011

Имеет ли текстовый текст, который вы связываете для реализации INotifyPropertyChanged?

Если это не шаблонный проект MVVM, убедитесь, что класс, содержащий свойство, которое вы связываете, реализует этот интерфейс, и убедитесь, чтовызвать делегат для события при изменении свойства (например, OnPropertyChanged ("MyProperty"))

Если это проект MVVM, и вы не используете платформу, лучше всего извлечь все ваши ViewModels избаза ViewModel, которая реализует INotifyPropertyChanged.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...