Windows Phone App 8.无法在xaml标记中显示数据

时间:2014-06-10 14:25:29

标签: c# xaml windows-phone windows-phone-8.1 windows-phone-8-sdk

我已经能够轻松地在页面之间传输对象,但现在我无法在xaml标记中显示数据。

这是存储在应用程序的sdf文件中的Quote实体:

[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始终为空。当我也尝试使用Binding时,intellisense不建议 “QuoteOfTheDay”。

我显然错过了重要的事情,但我真的不知道它是什么。

2 个答案:

答案 0 :(得分:2)

快速查看代码会显示几个问题:

  1. 您正在C#代码中初始化一个TextBlock,它的名称与您在XAML中定义的TextBlock的名称相同。这意味着您不会更改实际显示的XAML TextBlock的任何属性。
  2. 您正在为TextBlock指定DataContext为quoteToDisplay.QuoteOfTheDay,但XAML中的绑定语句为{Binding quoteToDisplay.QuoteOfTheDay},这意味着您正在尝试绑定到不存在的层次结构{{ 1}}。由于这个错误,您可能在输出窗口中收到BindingExpression错误。
  3. 我要做的是:

    quoteToDisplay.QuoteOfTheDay.quoteToDisplay.QuoteOfTheDay

    在XAML中:

    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); }
    }
    

答案 1 :(得分:0)

如果在代码隐藏中分配.Text属性,为什么要使用{Binding}?我认为你必须从xaml中移除绑定或(并且它更好的方式)使用MVVM。