1

у меня есть:INotifyPropertyChanged когда PropertyChanged

<Page.Resources> 
    <data:PublishManager x:Key="pubManager"/> 
</Page.Resources> 

то в моем TextBlock я использовал это:

 <TextBlock Grid.Row="2" Canvas.ZIndex="3" HorizontalAlignment="Center" VerticalAlignment="Center" Text="{Binding Path=SocialStatus, Mode=TwoWay, Source={StaticResource pubManager}}"></TextBlock> 

мой класс PublishManager выглядеть следующим образом:

public event PropertyChangedEventHandler PropertyChanged; 
    public void RaisePropertyChanged(string propertyName) 
    { 
     if (PropertyChanged != null) 
      PropertyChanged(this, new PropertyChangedEventArgs(propertyName)); 
    } 

    private string _SocialStatus; 
    public string SocialStatus 
    { 
     get 
     { 
      return _SocialStatus; 
     } 
     set 
     { 
      _SocialStatus = value; 
      RaisePropertyChanged("SocialStatus"); 
     } 
    } 

почему, когда я пишу в мой метод код что-то вроде этого, это не работает для меня?

SocialStatus = "StackOverflow"; 

Почему моя страница с TextBlock не обновляет контент?

+0

Does viewmodel объявляет 'INotifyPropertyChanged' (я имею в виду, что у вас есть' class PublishManager: INotifyPropertyChanged')? Я не вижу ошибок в противном случае, где находится «TextBlock» (возможно, он не может достичь «DataContext»)? У вас есть ошибки привязки в окне «Вывод»? – Sinatr

+0

@Sinatr я объявляет INotifyPropertyChanged, связывающую работу, в моем TextBlock видимой информации, например, если он объявлен в общественном PublishManager конструктор () { SocialStatus = "NIKITA"; } Это привязка выполняется, но если я переопределяю свойство, так как ничего не происходит – user3588235

+0

* Переопределить свойство *? Вы имеете в виду заданное значение? Как именно вы устанавливаете значение? – Sinatr

ответ

3

Проблема в том, что вы используете статический ресурс в своем сценарии привязки. Статические ресурсы не отслеживаются в случае изменений свойств. Вам действительно нужно использовать ваш PublishManager в качестве ресурса страницы?

Было бы лучше, если экземпляр PublishManager будет установлен как DataContext.

Итак, во-первых установить Page.DataContext:

<Page.DataContext> 
    <data:PublishManager/> 
</Page.DataContext> 

А потом связывается свойство контекста:

<TextBlock Grid.Row="2" Canvas.ZIndex="3" HorizontalAlignment="Center" VerticalAlignment="Center" Text="{Binding SocialStatus}"/> 
1

https://msdn.microsoft.com/en-us/library/cc838207%28v=vs.95%29.aspx

связывания с статическим источником работ. Вам просто нужно убедиться, что данные: сопоставляются с правильным пространством имен. Поскольку вы не предоставили полный Xaml. вы можете проверить это.

<UserControl x:Class="PublishManager.Page" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    xmlns:data="clr-namespace:namespace-to-code"> 

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

+0

Хорошо, но будет ли NotifyPropertyChanged обработанным «TextBlock»? –

2

Не используйте здесь StaticResource. Они используются, когда значение ресурса вряд ли изменится. Читайте ниже ссылкам:

StaticResource

using StaticResource

если значение SocialStatus всегда будет StackOverflow затем объявить статическое свойство с этим значением и ваше связывание должно работать. иначе вам нужно создать объект класса и передать его как datacontext для представления.

Или просто создать DataContext, когда требуется

<TextBlock Grid.Row="2" Canvas.ZIndex="3" HorizontalAlignment="Center" VerticalAlignment="Center" 
       Text="{Binding Path=SocialStatus, Mode=TwoWay}"> 
     <TextBlock.DataContext> 
      <data:PublishManager/> 
     </TextBlock.DataContext> 
    </TextBlock> 

это тоже будет работать.

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