【发布时间】:2013-08-09 06:58:37
【问题描述】:
我是 Silverlight 和数据绑定概念的新手,但我仍然无法解决我的问题。经过几天的研究,我还没有找到解决方案。
这是我的问题:
我正确地将String 属性绑定到我的TextBlock 的文本,如下所示:
MainPage.xaml
<Grid Background="Blue" DataContext="{StaticResource WP8Displayable}">
<TextBlock x:Name="tbCanvasTitle" TextWrapping="Wrap" Text="{Binding titleDisplayable}" FontWeight="Bold" HorizontalAlignment="Center"/>
</Grid>
WP8Displayable.cs
public class WP8Displayable : IDisplayable, INotifyPropertyChanged
{
public String title { get; set; }
#region INotifyPropertyChanged Members
public string titleDisplayable
{
get
{
return title;
}
set
{
if (title != value)
{
title = value;
NotifyPropertyChanged("titleDisplayable");
}
}
}
public event PropertyChangedEventHandler PropertyChanged;
// Used to notify the page that a data context property changed
private void NotifyPropertyChanged(string propertyName)
{
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
}
#endregion
public void setTitle(String s)
{
this.title = s;
NotifyPropertyChanged("titleDisplayable");
}
}
我的MainPage.xaml.cs 中有一个线程可以实例化WP8Displayable 类的一个或多个实例。当其中一个实例调用setTitle(String s) 时,我的TextBlock 中的文本没有更新,似乎我的DataContext 设置不正确。
编辑:
我的线程在MainPage_Loaded(object sender, RoutedEventArgs e) 方法中的MainPage.xaml.cs 中启动,并执行以下操作:
var instanceWP8Displayable = new WP8Displayable();
//tbCanvasTitle.DataContext = instanceWP8Displayable; HERE IS WHAT I WOULD LIKE TO DO ON XAML
instanceWP8Displayable.setTitle("my Title");
编辑 2:App.xaml
<Application
x:Class="AMS.App"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:phone="clr-namespace:Microsoft.Phone.Controls;assembly=Microsoft.Phone"
xmlns:shell="clr-namespace:Microsoft.Phone.Shell;assembly=Microsoft.Phone"
xmlns:windows="clr-namespace:System.Windows;assembly=System.Windows"
xmlns:ioC="clr-namespace:AMS.Controller">
<!--Application Resources-->
<Application.Resources>
<windows:ResourceDictionary>
<local:LocalizedStrings xmlns:local="clr-namespace:AMS" x:Key="LocalizedStrings"/>
<ioC:Locator x:Key="Locator" x:Name="Locator" />
</windows:ResourceDictionary>
</Application.Resources>
MainPage.xaml
<Grid x:Name="LayoutRoot" Background="White">
<Grid Background="Blue" DataContext="{Binding Source={StaticResource Locator}, Path=WP8Displayable}">
<TextBlock x:Name="tbCanvasTitle" TextWrapping="Wrap" Text="{Binding titleDisplayable}" FontWeight="Bold" HorizontalAlignment="Center"/>
</Grid>
<Grid.DataContext>
<local:WP8Displayable />
</Grid.DataContext>
</Grid>
在这种情况下如何动态设置 DataContext ? 是否可以将多个实例链接到同一个对象?
如果有人作为线索或觉得我的问题不够清楚,请随时告诉我。
谢谢。
【问题讨论】:
-
在后面的代码中设置datacontext时标题会更新对吗?
-
是的,它有效。我试了一下以确保我的绑定没问题。但我不知道何时会创建多少个 WP8Displayable 实例。
标签: c# silverlight data-binding windows-phone-8