c# - 从 WP8.1 重定向到 WP8 后,ItemsControl 的数据绑定(bind)不起作用

标签 c# windows-phone-8 data-binding

我使用 ItemTemplate 和 DataTemplate 创建了一个简单的 ItemsControl。

我将填充的 IEnumerable 分配给 DataContext,但没有显示任何项目。

这是我的 ItemsControl (XAML):

<ItemsControl Name="pnlMenu" DataContext="{Binding}"
    Grid.Row="0" Margin="5,17,0,28">
    <ItemsControl.ItemsPanel>
        <ItemsPanelTemplate>
            <StackPanel Orientation="Vertical"/>
        </ItemsPanelTemplate>
    </ItemsControl.ItemsPanel>
    <ItemsControl.ItemTemplate>
        <DataTemplate>
            <Button BorderBrush="{x:Null}" BorderThickness="0" Background="DodgerBlue" Height="25" Width="185" Margin="5,0" RenderTransformOrigin="0.5,0.5">
                <Button.ContentTemplate>
                    <DataTemplate>
                        <StackPanel HorizontalAlignment="Left" Orientation="Horizontal" Width="170">
                            <Image Source="Assets/Square71x71Logo.scale-100.png" Width="35" />
                            <TextBlock Text="{Binding Title}" VerticalAlignment="Center" Margin="5,0,0,0" />
                        </StackPanel>
                    </DataTemplate>
                </Button.ContentTemplate>
            </Button>
        </DataTemplate>
    </ItemsControl.ItemTemplate>
</ItemsControl>

这是隐藏代码(C#):

public void SetMenuDataContent(IEnumerable<NavDataGroup> groups)
{
    pnlMenu.DataContext = groups;
}

这可能听起来很奇怪,但我实际上是从 WP8.1 转到 WP8,而不是相反。

这曾经在 WP8.1 中工作,但为什么在 WP8 中不起作用? MSDN 向我展示了类似的例子...

下面是 IEnumerable 中的组示例:

{
  "Groups":[
  {
    "UniqueId": "mainpage",
    "Title": "Start",
    "Subtitle": "U bent hier thuis",
    "ImagePath": "Assets/DarkGray.png",
    "Description": "Een snel overzicht...",
    "Items":
    [
      {
        "UniqueId": "outdoors",
        "Title": "Buitenbad",
        "Subtitle": "Het buitenbad is vandaag",
        "ImagePath": "Assets/Open.png",
        "Description" : "",
        "Content" : "Open"
      },
      {
        "UniqueId": "indoors",
        "Title": "Binnenbad",
        "Subtitle": "Het binnenbad is vandaag",
        "ImagePath": "Assets/Open.png",
        "Description" : "",
        "Content" : "Open"
      },
      {
        "UniqueId": "photos",
        "Title": "Foto's",
        "Subtitle": "",
        "ImagePath": "Assets/LightGray.png",
        "Description" : "",
        "Content" : "[\"Assets/LightGray.png\", \"Assets/DarkGray\", \"Assets/MediumGray\"]"
      }
    ]
  }
  ]
}

最佳答案

这是一个适合我的解决方案:

public async void SetMenuDataContent()
{
    this.DataContext = groups;
}

我直接绑定(bind)到 UserControl 的 DataContext。 当我尝试绑定(bind)到 UserControl 内部的控件和 UserControl 本身时,出现了问题。显然这是一个很容易犯的错误。

关于c# - 从 WP8.1 重定向到 WP8 后,ItemsControl 的数据绑定(bind)不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23328197/

相关文章:

c# - 如何对齐标签中的文本

c# - 在两种语言通用的 Java 和 C# 中生成 key

c# - 对 Windows Phone 设备的 iBeacon 支持

c# - 模板中控件之间的绑定(bind)

c# - Xamarin Forms - 将光标更改为等待光标

c# - Asp.Net Core 2.0.1 的 Serilog 设置不生成日志

c# - Windows Phone 8 的计时器

microsoft-metro - linq to sql(Windows Phone 的本地数据库)更好吗? (或者)移动版的 sqlite-net 版本更好?用于 Windows Phone 8 本地数据库创建

c# - 试图了解 INotifyPropertyChanged

javascript - 如何在knockoutjs中绑定(bind)嵌套选项