数据绑定整数始终为0

时间:2014-07-23 00:02:00

标签: c# xaml data-binding windows-phone-8.1

我有TextBlock我绑定了int。我的int位于CalorieTracker的单独班级(TextBlock)中。我猜测CalorieTracker未初始化,但应该是,对吧?我感到很困惑。我在这里缺少什么想法?我是Windows Phone开发的新手,(并且每个人都是Windows Phone 8.1开发的新手),但希望有人可以解释一下!

以下是我TextBlock的代码:

        <HubSection x:Uid="HubSection1" Header="SECTION 1" HeaderTemplate="{ThemeResource HubSectionHeaderTemplate}">
            <HubSection.DataContext>
                <local:CalorieTracker/>
            </HubSection.DataContext>
            <DataTemplate>
                    <TextBlock x:Name="caloriesAvailableTextBlock" Loaded="caloriesAvailableTextBlock_Loaded" TextWrapping="Wrap" FontSize="36" Text="{Binding CaloriesAvailable}"/>
            </DataTemplate>
        </HubSection>

这是我的CalorieTracker课程:

public class CalorieTracker : INotifyPropertyChanged
{
    private int caloriesAvailable;
    public int CaloriesAvailable
    {
        get { return caloriesAvailable; }
        set { caloriesAvailable = value;
        NotifyPropertyChanged("CaloriesAvailable");
        }
    }

    public event PropertyChangedEventHandler PropertyChanged;
    private void NotifyPropertyChanged(String propertyName)
    {
        if (PropertyChanged != null)
        {
            PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
        }
    }
}

在我的TextBlock部分的代码后面,我有属性:

    public CalorieTracker CalorieTracker { get; set; }

我在NavigationHelper_LoadState方法中初始化它:

    private void NavigationHelper_LoadState(object sender, LoadStateEventArgs e)
    {
        CalorieTracker = new CalorieTracker();
        CalorieTracker.CaloriesAvailable = 2000;
    }

TextBlock总是显示为0的任何想法? (在我的实际代码中,我还有一个更改CaloriesAvailable的值的按钮。)

2 个答案:

答案 0 :(得分:1)

我相信这可能也是你所指的。

在您的代码中,您有此部分:

        <HubSection.DataContext>
            <local:CalorieTracker/>
        </HubSection.DataContext>

此步骤实际初始化CalorieTracker的实例,并将此实例设置为HubSection的DataContext。最重要的是你在CalorieTracker中拥有你的属性,CaloriesAvailable是一个int,int的默认值是0,所以当它初始化并且你没有将CaloriesAvailable设置为任何特定时,它使用默认值0,这个这就是你的文本框显示0的原因 我希望这有帮助。
为语法道歉,而不是我的强项:P

答案 1 :(得分:1)

另一种可能的方法是通过CalorieTracker获取从XAML设置的DataContext对象,而不是创建新的CalorieTracker实例:

private void NavigationHelper_LoadState(object sender, LoadStateEventArgs e)
{
    CalorieTracker = (CalorieTracker)HubSection1.DataContext;
    CalorieTracker.CaloriesAvailable = 2000;
}