我有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
的值的按钮。)
答案 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;
}