Модераторы: gambit, Kefir, Partizan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> После реализации INotifyPropertyChanged не удаётся 
V
    Опции темы
Compositum
Дата 27.3.2010, 11:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Senior developer
**


Профиль
Группа: Awaiting Authorisation
Сообщений: 430
Регистрация: 6.1.2008
Где: Санкт-Петербург

Репутация: 1
Всего: 1



Имеется два класса, отличающихся друг от друга только тем, что один из них реализует интерфейс INotifyPropertyChanged:
Код

namespace WpfBinding
{
    public class Class1
    {
        int val;
        public int Value { 
            get { return val; } 
            set { val = value; } }

        
    }

    public class Class2 : INotifyPropertyChanged
    {
        int val;
        public int Value
        {
            get { return val; }
            set { val = value; PropertyChanged(this, new PropertyChangedEventArgs("Value")); }
        }

        #region INotifyPropertyChanged Members

        public event PropertyChangedEventHandler PropertyChanged;

        #endregion
    }
}

Имеется XAML-код окна, в котором в качестве источника используется экземпляр класса Class1:
Код

<Window x:Class="WpfBinding.Window1"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:ab="clr-namespace:WpfBinding"
    Title="Window1" Height="173" Width="312">
    <Window.DataContext>
        <ab:Class2 Value="30"/>
    </Window.DataContext>
    <Grid>
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="50*" />
            <ColumnDefinition Width="50*" />
        </Grid.ColumnDefinitions>
        <Grid.RowDefinitions>
            <RowDefinition Height="Auto" />
            <RowDefinition Height="Auto" />
            <RowDefinition Height="100*" />
        </Grid.RowDefinitions>
        <Label Margin="5" Name="label1">
            <Label.Content>
                <Binding Path="Value" Mode="OneWay"/>
            </Label.Content>
        </Label>
        <TextBox Grid.Column="1" Margin="5" Name="textBox1" />
        <Slider Grid.ColumnSpan="2" Grid.Row="1" Height="22" Margin="5" Name="slider1" VerticalAlignment="Bottom" Minimum="0" Maximum="100" />
        <Button Grid.Row="2" Margin="5" Name="button1">Button</Button>
        <Button Grid.Column="1" Grid.Row="2" Margin="5" Name="button2">Button</Button>
    </Grid>
</Window>

При запуске приложения, label1 отображает число 30, однако, если для Window.DataContext я задам не Class1, а Class2, то тут же получаю ошибку в редакторе xaml:
Цитата

Value '30' cannot be assigned to property 'Value'. Object reference not set to an instance of an object.

Почему получаю ошибку?

п.с. Администраторам: предлагаю ограничить длину строки заголовка топика до 3-5 букв, чтобы уж совсем весело было...

Это сообщение отредактировал(а) Compositum - 27.3.2010, 11:18
PM   Вверх
Partizan
Дата 27.3.2010, 11:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Let's do some .NET
****


Профиль
Группа: Модератор
Сообщений: 2828
Регистрация: 19.12.2005
Где: Санкт-Петербург

Репутация: 9
Всего: 67



Потому что делать надо так:

Код

    public class Class2 : INotifyPropertyChanged
    {
        int val;
        public int Value
        {
            get { return val; }
            set { 
               if (val != value)
               {
                    val = value;
                    this.OnPropertyChanged("Value");
               }  
           }
        }
        #region INotifyPropertyChanged Members
        public event PropertyChangedEventHandler PropertyChanged;

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



--------------------
СУВ,
       Partizan.
PM MAIL WWW ICQ Skype GTalk Jabber   Вверх
Compositum
Дата 27.3.2010, 15:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Senior developer
**


Профиль
Группа: Awaiting Authorisation
Сообщений: 430
Регистрация: 6.1.2008
Где: Санкт-Петербург

Репутация: 1
Всего: 1



Спасибо!
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | WPF и Silverlight | Следующая тема »


 




[ Время генерации скрипта: 0.0545 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.