我有:
<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 :(得分:3)
问题是您在绑定方案中使用静态资源。在属性改变的情况下,不监视静态资源。您真的需要使用PublishManager
作为页面资源吗?
将PublishManager
的实例设置为DataContext
会更好。
首先设置Page.DataContext
:
<Page.DataContext>
<data:PublishManager/>
</Page.DataContext>
然后绑定到context属性:
<TextBlock Grid.Row="2" Canvas.ZIndex="3" HorizontalAlignment="Center" VerticalAlignment="Center" Text="{Binding SocialStatus}"/>
答案 1 :(得分:2)
请勿在此处使用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>
这也可以。
答案 2 :(得分: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使其更具可重用性。就像Patryk提供的答案一样。