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"。

我显然错过了一些重要的东西,但我真的看不出它是什么。

Windows Phone应用程序不能用xaml标记显示数据

快速查看您的代码会发现几个问题:

  1. 你在c#代码中初始化一个TextBlock,给它与你在XAML中定义的TextBlock相同的名字。这意味着你没有改变XAML TextBlock的任何属性,它是实际显示的。
  2. 你指定一个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。