所以,我做了一个非常简单的尝试,尝试从我拥有的类的属性尝试数据绑定,但无论出于何种原因,代码实际上做了什么。它没有抛出任何错误,但有些东西一定不能正常工作。我目前正在测试它是否表现得像我想要的那样,在这种情况下,它会将矩形的不透明度设置为零。这是数据模板的xaml似乎无法正确响应:
<HubSection x:Name="China" Width="440" Height="460" Background="#FF343434" Header="China" IsHeaderInteractive="True" Tapped="{x:Bind HubSectionTapped}" HorizontalAlignment="Left" VerticalAlignment="Center" Margin="50,0,0,0">
<DataTemplate x:DataType="data:MainPageView">
<Grid Height="460" Width="410" VerticalAlignment="Bottom" x:Name="ChinaBackground">
<Image Source="Assets/chinaFlag.bmp" x:Name="ChinaFlag"/>
<Rectangle x:Name="ChinaSelected_Rect" Width="410" Height="30" VerticalAlignment="Bottom" Fill="BlueViolet" Opacity="{x:Bind Opacity1}"/>
</Grid>
</DataTemplate>
</HubSection>
这里有代码:
public MainPageView TheMainPageView;
public MainPage()
{
this.InitializeComponent();
timer = new DispatcherTimer();
timer.Tick += Timer_DyanmicResize;
timer.Tick += Timer_SelectionIndicator;
timer.Start();
TheMainPageView = new MainPageView ();
}
最后,这里引用了MainPageView类:
public class MainPageView
{
public int Opacity1 {get; set;}
public int Opacity2 {get;set;}
public int Opacity3 { get; set; }
public MainPageView()
{
this.Opacity1 = 0;
this.Opacity2 = 0;
this.Opacity3 = 0;
}
}
在XAML中我添加了xmlns:data =&#34;使用:TestApp.Models&#34; (models是MainPageView所在的文件夹)。正如我所说,它不会抛出错误,但它也没有做任何事情,所以我有点不知道从哪里开始解决这个问题,因为没有任何错误。追溯。提前感谢您提供的任何帮助
答案 0 :(得分:2)
HubSection 使用DataTemplate定义该部分的内容,内容可以内联定义或绑定到数据源。在此DataTemplate
中使用绑定时,我们需要设置DataContext
HubSection
属性来为DataTemplate
提供数据源。
{x:Bind} 不使用 DataContext 作为默认来源,而是使用页面或用户控件本身。因此,它将查看页面或用户控件的代码隐藏属性,字段和方法。
在页面或用户控件中直接使用{x:Bind}
时,这是正确的。在DataTemplate
内,有一点不同。
在 DataTemplate (无论是用作项目模板,内容模板还是标题模板)中,路径的值不会被解释为页面的上下文,但是在模板化的数据对象的上下文中。因此,在编译时可以验证其绑定(以及为它们生成有效的代码), DataTemplate 需要使用 x:DataType 声明其数据对象的类型。
有关UWP中数据绑定的更多信息,请查看Data binding in depth。
要解决您的问题,您只需在DataContext
中设置HubSection
,如下所示:
<HubSection x:Name="China" Width="440" Height="460" Background="#FF343434" Header="China" IsHeaderInteractive="True" Tapped="{x:Bind HubSectionTapped}" HorizontalAlignment="Left" VerticalAlignment="Center" Margin="50,0,0,0" DataContext="{x:Bind TheMainPageView}">
<DataTemplate x:DataType="data:MainPageView">
<Grid Height="460" Width="410" VerticalAlignment="Bottom" x:Name="ChinaBackground">
<Image Source="Assets/chinaFlag.bmp" x:Name="ChinaFlag"/>
<Rectangle x:Name="ChinaSelected_Rect" Width="410" Height="30" VerticalAlignment="Bottom" Fill="BlueViolet" Opacity="{x:Bind Opacity1}"/>
</Grid>
</DataTemplate>
</HubSection>
在{x:Bind}
中使用HubSection
时,它会将页面本身用作其数据源,因为HubSection
直接位于页面中。因此它可以在代码隐藏中获得TheMainPageView
字段。但对于{x:Bind}
中的DataTemplate
,它不能如此
它的数据源是模板化而不是页面的数据对象。因此,我们需要通过设置DataContext
的{{1}}属性来提供此数据对象。
答案 1 :(得分:0)
检查输出窗口是否有错误,但我想你可能会在那里看到绑定错误。不透明度是双倍的,您使用的是int,因此会出现类型转换错误。