Windows Phone应用程序不能用xaml标记显示数据
本文关键字:显示 数据 xaml Phone 应用程序 不能 Windows | 更新日期: 2023-09-27 18:08:11
我已经能够轻松地在页面之间传输对象,但是现在我不能在xaml标记中显示数据。
Quote实体存储在应用程序的sdf文件中:
[Table]
public class Quote
{
[Column(IsPrimaryKey = true, IsDbGenerated = true, DbType = "INT NOT NULL Identity", CanBeNull = false, AutoSync = AutoSync.OnInsert)]
public int Id { get; set; }
[Column(CanBeNull = false)]
public string QuoteOfTheDay { get; set; }
[Column(CanBeNull = false)]
public string SaidBy { get; set; }
[Column(CanBeNull = true)]
public string Context { get; set; }
[Column(CanBeNull = true)]
public string Episode { get; set; }
[Column(CanBeNull = true)]
public string Season { get; set; }
}
下面是后面的代码:
protected override void OnNavigatedTo(NavigationEventArgs e)
{
base.OnNavigatedTo(e);
DataContext = this;
var quote = PhoneApplicationService.Current.State["q"];
Quote quoteToDisplay = (Quote)quote;
}
public static readonly DependencyProperty QuoteToDisplayProperty = DependencyProperty.Register(
"QuoteToDisplay", typeof(Quote), typeof(PhoneApplicationPage), new PropertyMetadata(default(Quote)));
public Quote QuouteToDisplay
{
get { return (Quote)GetValue(QuoteToDisplayProperty); }
set { SetValue(QuoteToDisplayProperty, value); }
}
xaml: <Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0">
<TextBlock FontSize="36" FontFamily="Verdana" FontWeight="ExtraBlack" Text="{Binding QuoteToDisplay.QuoteOfTheDay}" />
</Grid>
我得到了我想在xaml中显示的确切数据。我想在TextBlock中显示QuoteOfTheDay属性。但是每次我尝试使用{Binding}时,TextBlock总是空的。当我也尝试使用绑定时,智能感知并不建议"QuoteOfTheDay"。
我显然错过了一些重要的东西,但我真的看不出它是什么。
快速查看您的代码会发现几个问题:
- 你在c#代码中初始化一个TextBlock,给它与你在XAML中定义的TextBlock相同的名字。这意味着你没有改变XAML TextBlock的任何属性,它是实际显示的。
- 你指定一个DataContext为你的TextBlock是
quoteToDisplay.QuoteOfTheDay
,但然后你在XAML的绑定语句是{Binding quoteToDisplay.QuoteOfTheDay}
,这意味着你试图绑定到一个不存在的层次结构quoteToDisplay.QuoteOfTheDay.quoteToDisplay.QuoteOfTheDay
。由于这个错误,你可能会在输出窗口中得到一个BindingExpression错误。
我要做的是:
protected override void OnNavigatedTo(NavigationEventArgs e)
{
base.OnNavigatedTo(e);
DataContext = this;
var quote = PhoneApplicationService.Current.State["q"];
QuoteToDisplay = (Quote)quote;
}
public static readonly DependencyProperty QuoteToDisplayProperty = DependencyProperty.Register(
"QuoteToDisplay", typeof (Quote), typeof (MainPage), new PropertyMetadata(default(Quote)));
public Quote QuoteToDisplay
{
get { return (Quote) GetValue(QuoteToDisplayProperty); }
set { SetValue(QuoteToDisplayProperty, value); }
}
在XAML中:
<Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0">
<TextBlock FontSize="36" FontFamily="Verdana" FontWeight="ExtraBlack" Text="{Binding QuoteToDisplay.QuoteOfTheDay}" />
</Grid>
如果在代码隐藏中分配.Text属性,为什么要使用{Binding} ?我认为你必须从xaml中删除绑定,或者(这是更好的方法)使用MVVM。