Привязка данных XAML не обновляется

просто нужна небольшая помощь с привязкой данных.

Итак, у меня есть ObservableCollection настраиваемого объекта. Свойства объекта следующие:

    /// <summary>
    /// Name
    /// </summary>
    private string _name;
    public string Name
    {
        get
        {
            return _name;
        }
        set
        {
            if (value != _name)
            {
                _name = value;
                NotifyPropertyChanged("Name");
            }
        }
    }        

    /// <summary>
    /// Status
    /// </summary>
    private int _status;
    public int Status
    {
        get
        {
            return _status;
        }
        set
        {
            if (value != _status)
            {
                _status = value;
                NotifyPropertyChanged("Status");
            }
        }
    }

    /// <summary>
    /// Visible information
    /// </summary>
    private Visibility _visible;
    public Visibility Visible
    {
        get
        {
            return _visible;
        }
        set
        {
            if (value != _visible)
            {
                _visible = value;
                NotifyPropertyChanged("Visible");
            }
        }
    }

    public event PropertyChangedEventHandler PropertyChanged;
    private void NotifyPropertyChanged(String propertyName)
    {
        PropertyChangedEventHandler handler = PropertyChanged;
        if (null != handler)
        {
            handler(this, new PropertyChangedEventArgs(propertyName));
        }
    }

И в основном у меня есть три текстовых блока, первые два из которых имеют текст, привязанный к имени и статусу, а третий имеет:

Visibility = {Binding Visible}

Но всякий раз, когда я хочу переключить свойство видимости, я могу только переключить его из состояния Visible в Collapsed, а затем не снова. Мой переключатель выглядит так:

            ItemViewModel l = ((sender as LongListSelector).SelectedItem) as ItemViewModel;
            MessageBox.Show(l.Visible.ToString());
            if (l.Visible == Visibility.Collapsed)
                l.Visible = Visibility.Visible;
            else
                l.Visible = Visibility.Collapsed;

Примечание. ItemViewModel - это настраиваемый класс для коллекции, т. Е.

ObservableCollection<ItemViewModel>

Очевидно, это всего лишь грубый тест, но он все равно не работает. В окне сообщения всегда отображается «Видимый» независимо от реального состояния видимости элемента. Как я могу получить его, чтобы получить реальное значение видимости?

Если у кого-то есть идеи, это было бы здорово.

Спасибо.

РЕДАКТИРОВАТЬ: добавление XAML для текстовых блоков для ясности:

<TextBlock Text="{Binding Name}" TextWrapping="Wrap" Style="{StaticResource PhoneTextExtraLargeStyle}" FontSize="20"/>
<TextBlock Text="{Binding Status}" TextWrapping="Wrap" Margin="12,-6,280,0" Style="{StaticResource PhoneTextSubtleStyle}"/>
<TextBlock x:Name="t1" Text="Test for visibility" TextWrapping="Wrap" Margin="12,-6,12,0" Style="{StaticResource PhoneTextSubtleStyle}" Visibility="{Binding Visible}"/>

Имейте в виду, что эти текстовые блоки заключены в стековую панель и longlistselector, поэтому о простом изменении t1.Visible не может быть и речи.


person Travv92    schedule 19.11.2012    source источник
comment
Можете ли вы опубликовать весь XAML для третьего текстового поля?   -  person CodingGorilla    schedule 19.11.2012
comment
Добавлен в исходный пост, чтобы было заметнее   -  person Travv92    schedule 19.11.2012
comment
Ваш отладочный msgbox ведет себя так, как вы ожидаете?   -  person Martin Clarke    schedule 19.11.2012
comment
Правильно ли я понимаю, что ваша собственность всегда остается Visible? Итак, проблема [может быть] в том, что ваше свойство не меняется, а не в том, что привязка не работает?   -  person CodingGorilla    schedule 19.11.2012
comment
@MartinClarke Нет, он всегда показывает "Видимый" независимо от фактического состояния.   -  person Travv92    schedule 19.11.2012
comment
@CodingGorilla Может быть, но вроде работает. Например, у одного из элементов есть третий видимый текстовый блок, и переключение его значения правильно скрывает текстовый блок, его просто попытка переключить его обратно ничего не дает.   -  person Travv92    schedule 19.11.2012
comment
@ Traw92 Значит, вы можете установить для свойства Visible значение Collapsed, и оно исчезнет, ​​но MessageBox по-прежнему говорит, что это Visible? Но вы никогда не сможете вернуть его на Visible?   -  person CodingGorilla    schedule 19.11.2012
comment
@CodingGorilla Это правильно   -  person Travv92    schedule 19.11.2012
comment
вы установили свой DataContext в свою ObservableCollection ‹ItemViewModel›   -  person S3ddi9    schedule 19.11.2012
comment
@ SéddikLaraba DataContext = App.ViewModel в конструкторе   -  person Travv92    schedule 19.11.2012
comment
@ Traw92 Вы установили точку останова в установщике свойств, чтобы убедиться, что действительное не отменяется из другого фрагмента кода?   -  person CodingGorilla    schedule 19.11.2012
comment
@CodingGorilla СПАСИБО! Это сделало это ... Как глупо с моей стороны, у меня был другой код, меняющий значение.   -  person Travv92    schedule 19.11.2012


Ответы (1)


Проблема, после дополнительного исследования, заканчивается тем, что свойство устанавливалось другой ветвью кода.

person CodingGorilla    schedule 19.11.2012