我有:
<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页面不刷新内容?
发布于 2016-01-12 16:25:34
问题是在绑定场景中使用静态资源。在发生属性更改时,不监视静态资源。您真的需要使用您的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}"/>发布于 2016-01-13 09:35:38
这里不要使用StaticResource。在资源价值不可能发生变化的情况下使用它们。请阅读以下链接:
StaticResource
使用StaticResource
如果SocialStatus的值总是为StackOverflow,那么使用该值声明静态属性,您的绑定就会工作。否则,您必须创建类的对象,并将其作为数据文本提供给视图。
或者在需要时创建一个数据文本。
<TextBlock Grid.Row="2" Canvas.ZIndex="3" HorizontalAlignment="Center" VerticalAlignment="Center"
Text="{Binding Path=SocialStatus, Mode=TwoWay}">
<TextBlock.DataContext>
<data:PublishManager/>
</TextBlock.DataContext>
</TextBlock>这个也能用。
发布于 2016-01-12 16:37:00
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给出的答案。
https://stackoverflow.com/questions/34748145
复制相似问题