首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >INotifyPropertyChanged时PropertyChanged

INotifyPropertyChanged时PropertyChanged
EN

Stack Overflow用户
提问于 2016-01-12 15:53:36
回答 3查看 248关注 0票数 1

我有:

代码语言:javascript
复制
 <Page.Resources>  
    <data:PublishManager x:Key="pubManager"/>
 </Page.Resources>

然后在我的textBlock中我使用了这个:

代码语言:javascript
复制
        <TextBlock Grid.Row="2" Canvas.ZIndex="3" HorizontalAlignment="Center" VerticalAlignment="Center" Text="{Binding Path=SocialStatus, Mode=TwoWay, Source={StaticResource pubManager}}"></TextBlock>

我的类PublishManager如下所示:

代码语言:javascript
复制
 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");
        }
    }

为什么当我在我的方法代码中写类似这样的代码时,它对我不起作用?

代码语言:javascript
复制
SocialStatus = "StackOverflow";

为什么我的TextBlock页面不刷新内容?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-01-12 16:25:34

问题是在绑定场景中使用静态资源。在发生属性更改时,不监视静态资源。您真的需要使用您的PublishManager作为页面资源吗?

最好将PublishManager的实例设置为DataContext

所以首先设置Page.DataContext

代码语言:javascript
复制
<Page.DataContext>  
    <data:PublishManager/>
</Page.DataContext>

然后绑定到context属性:

代码语言:javascript
复制
<TextBlock Grid.Row="2" Canvas.ZIndex="3" HorizontalAlignment="Center" VerticalAlignment="Center" Text="{Binding SocialStatus}"/>
票数 3
EN

Stack Overflow用户

发布于 2016-01-13 09:35:38

这里不要使用StaticResource。在资源价值不可能发生变化的情况下使用它们。请阅读以下链接:

StaticResource

使用StaticResource

如果SocialStatus的值总是为StackOverflow,那么使用该值声明静态属性,您的绑定就会工作。否则,您必须创建类的对象,并将其作为数据文本提供给视图。

或者在需要时创建一个数据文本。

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

这个也能用。

票数 2
EN

Stack Overflow用户

发布于 2016-01-12 16:37:00

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

绑定到静态源可以工作。您只需确保数据:映射到正确的命名空间。因为您没有提供完整的Xaml。你可能想看看这个。

代码语言:javascript
复制
<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使其更可重用。就像Patryk给出的答案。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34748145

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档