Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Windows store apps windows 8.1应用商店应用程序的按钮弹出按钮中Xaml标记绑定失败_Windows Store Apps_Winrt Xaml - Fatal编程技术网

Windows store apps windows 8.1应用商店应用程序的按钮弹出按钮中Xaml标记绑定失败

Windows store apps windows 8.1应用商店应用程序的按钮弹出按钮中Xaml标记绑定失败,windows-store-apps,winrt-xaml,Windows Store Apps,Winrt Xaml,我有一个windows 8.1应用商店应用程序,我不知道如何获取datacontext来访问我的relaycommand视图模型。xaml一直工作到弹出按钮,然后就失败了。因此,内容为“buttonWorks”的按钮成功地从rootGrid元素获取绑定,并在viewmodel上调用该命令。但弹出按钮中正下方的按钮不起作用。为什么? 要举例说明绑定问题,请使用拆分应用程序模板创建一个新的应用程序商店。然后将弹出按钮添加到SplitPage,并将文本框文本绑定到itemtitle元素。绑定不会填充弹

我有一个windows 8.1应用商店应用程序,我不知道如何获取datacontext来访问我的relaycommand视图模型。xaml一直工作到弹出按钮,然后就失败了。因此,内容为“buttonWorks”的按钮成功地从rootGrid元素获取绑定,并在viewmodel上调用该命令。但弹出按钮中正下方的按钮不起作用。为什么?

要举例说明绑定问题,请使用拆分应用程序模板创建一个新的应用程序商店。然后将弹出按钮添加到SplitPage,并将文本框文本绑定到itemtitle元素。绑定不会填充弹出式文本框。代码段如下所示:

<Image Source="{Binding ImagePath}" Grid.Row="1" Margin="0,0,20,0" Width="180" Height="180" Stretch="UniformToFill" AutomationProperties.Name="{Binding Title}"/>
    <StackPanel x:Name="itemDetailTitlePanel" Grid.Row="1" Grid.Column="1">
        <TextBlock x:Name="itemTitle" Margin="0,-10,0,0" Text="{Binding Title}" Style="{StaticResource SubheaderTextBlockStyle}"/>
        <TextBlock x:Name="itemSubtitle" Margin="0,0,0,20" Text="{Binding Subtitle}" Style="{StaticResource SubtitleTextBlockStyle}"/>
            <Button Content="Update">
                <Button.Flyout>
                    <Flyout>
                        <StackPanel>
                            <StackPanel Margin="5" Orientation="Vertical"  >
                                <TextBlock  Text="Item Title" VerticalAlignment="Bottom"/>
                                <TextBox Text="{Binding ElementName=itemTitle,Path=Text,Mode=TwoWay}"  Width="200" />
                            </StackPanel>
                       </StackPanel>
                   </Flyout>
              </Button.Flyout>
          </Button>
       </StackPanel>

我可以使用Dani的答案并在托管弹出按钮的按钮上设置datacontext(如下所示),使命令绑定正常工作,但我不能像上面的模板示例中所示绑定文本框

<Button Content="Update" HorizontalAlignment="Center" DataContext="{Binding ViewModel, ElementName=pageRoot}" >
<Button.Flyout>
    <Flyout>
        <StackPanel>
            <TextBlock  Text="Item Title" VerticalAlignment="Bottom"/>
            <TextBox Text="{Binding ElementName=itemTitle,Path=Text,Mode=TwoWay}"  Width="200" />

            <Button x:Name="buttonTest" Margin="5" Height="40" Content="Test" HorizontalAlignment="Center"   Command="{Binding UpdateMatchDataCommand}"/>

原始代码示例问题:

<Grid Name="rootGrid" Tag="{Binding}"  Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">

....

   <ScrollViewer
        x:Name="itemDetail"
        AutomationProperties.AutomationId="ItemDetailScrollViewer"
        Grid.Row="0"
        Grid.Column="1"
        Grid.RowSpan="2"
        Padding="60,0,66,0"
        HorizontalScrollBarVisibility="Disabled" VerticalScrollBarVisibility="Auto"
        DataContext="{Binding SelectedItem, ElementName=itemListView}"

       <Grid x:Name="itemDetailGrid" Margin="0,60,0,50">
           <StackPanel Orientation="Vertical" Grid.Row="1"  Margin="0,0,10,0" Width="180" Height="180">
                <Button Name="buttonWorks" Content="Test" Command="{Binding Tag.UpdateMatchDataCommand,ElementName=rootGrid}"/>

              <Button Content="Update" HorizontalAlignment="Center" >
                  <Button.Flyout>
                      <Flyout>
                          <Button Name="buttonFail" Content="Test" Command="{Binding Tag.UpdateMatchDataCommand,ElementName=rootGrid}"/>
                      </Flyout>
                  </Button.Flyout>
              </Button>
          </StackPanel>


....

....

如果您使用ViewModels,我建议您将DataContext更改为页面

<Page
    x:Name="rootPage"
    DataContext="{Binding ViewModel, RelativeSource={RelativeSource Self}}"
...
现在,您可以将命令更改为:

<Button Name="buttonWorks" Content="Test" Command="{Binding Tag.UpdateMatchDataCommand}"/>


ElementName现在只有在绑定到代码隐藏中的属性时才是必需的。

最后,我无法使用模板提供的绑定来解决问题。在我看来,不允许更改弹出按钮中单个元素的datacontext。因此,我绕过它的方法是在viewmodel中创建一个选定项,并更改模板代码以绑定到viewmodel上的选定项。然后将包括命令在内的所有元素绑定到整个表单的相同datacontext

    <ListView
        x:Name="itemListView"
        AutomationProperties.AutomationId="ItemsListView"
        AutomationProperties.Name="Items"
        TabIndex="1"
        Grid.Row="1"
        Margin="-10,-10,0,0"
        Padding="120,0,0,60"
        ItemsSource="{Binding Matches}"
        SelectedItem="{Binding SelectedMatch, Mode=TwoWay}"
        IsSwipeEnabled="False">
        <ListView.ItemTemplate>
            <DataTemplate>


现在,绑定适用于包括模板在内的所有字段。

这个答案可以部分地告诉我。谢谢,我在问题中添加了更多细节,并通过VS 2013 SplitApp模板创建了一个特定示例
    <ListView
        x:Name="itemListView"
        AutomationProperties.AutomationId="ItemsListView"
        AutomationProperties.Name="Items"
        TabIndex="1"
        Grid.Row="1"
        Margin="-10,-10,0,0"
        Padding="120,0,0,60"
        ItemsSource="{Binding Matches}"
        SelectedItem="{Binding SelectedMatch, Mode=TwoWay}"
        IsSwipeEnabled="False">
        <ListView.ItemTemplate>
            <DataTemplate>