C# 将ListView ItemTemplate绑定到Dictionary的键和值<;字符串,字符串>;

C# 将ListView ItemTemplate绑定到Dictionary的键和值<;字符串,字符串>;,c#,data-binding,windows-store-apps,winrt-xaml,windows-store,C#,Data Binding,Windows Store Apps,Winrt Xaml,Windows Store,我有一个字典,其中包含一些我想在列表视图中显示的数据。ListView肯定“看到”了正确数量的项目(因为我看到了第二个TextBlock的冒号的适当数量),但它既不显示键也不显示值绑定 我需要一个转换器还是什么 我是否需要更改并改为使用可观察集合 <ListView Grid.Row="1" IsItemClickEnabled="False" SelectionMode="None" IsHitTestVisible="False" IsSwip

我有一个
字典
,其中包含一些我想在
列表视图
中显示的数据。
ListView
肯定“看到”了正确数量的项目(因为我看到了第二个
TextBlock
的冒号的适当数量),但它既不显示
也不显示
绑定

我需要一个
转换器
还是什么

我是否需要更改并改为使用
可观察集合

<ListView Grid.Row="1" IsItemClickEnabled="False" 
          SelectionMode="None" IsHitTestVisible="False"
          IsSwipeEnabled="False"
          ItemsSource="{Binding SymbolInfoText}">
    <ListView.ItemTemplate>
        <DataTemplate>
            <StackPanel Orientation="Horizontal">
                <TextBlock Text="{Binding Key}"/>
                <TextBlock Text=": "/>
                <TextBlock Text="{Binding Value}"/>
            </StackPanel>
        </DataTemplate>
    </ListView.ItemTemplate>
</ListView>

public Dictionary<string, string> SymbolInfoText
{
    get
    {
        if (selectedItem == null)
        {
            return new Dictionary<string, string> { { "Error", "No Item Selected" } };
        }
        return selectedItem.GenerateObjectProperties(CurrentLocation, LocalMapManager.Map.Heading);
    }
}

公共词典符号文本
{
得到
{
如果(selectedItem==null)
{
返回新字典{{“错误”,“未选择项”};
}
返回selectedItem.GenerateObject属性(CurrentLocation,LocalMapManager.Map.Heading);
}
}

如果您是在factum之后添加项目(在应用程序启动并建立绑定链接之后),那么
字典将不是最佳选择,因为它没有实现
INotifyCollectionChanged
。在将元素添加到字典之后,尝试设置
ItemsSource
,您将看到项目实际上出现在列表中,您只需更新绑定即可


因此,是的,
observateCollection
将是一个更为优化的解决方案,因为它确实会在核心集合发生更改时发送通知

试试这个,它会告诉你你想要什么,但是你使用它的方式不是在WPF中使用集合的正常方式

public partial class MainWindow : Window
{
    public MainWindow()
    {
        this.DataContext = this;
        InitializeComponent();

    }


    public Dictionary<string, string> SymbolInfoText
    {
        get
        {
            return new Dictionary<string, string> { { "Error", "No Item Selected" }, { "Error1", "No Item Selected" } };


        }
    }


}
公共部分类主窗口:窗口
{
公共主窗口()
{
this.DataContext=this;
初始化组件();
}
公共词典符号文本
{
得到
{
返回新字典{{“Error”、“未选择项”}、{“Error1”、“未选择项”};
}
}
}

但我手动在SymbolInfoText属性上触发OnPropertyChanged,这就是我感到困惑的原因。我给问题中的属性添加了一些附加逻辑;当选择一个项目(因此selectedItem不再为null)时,将调用OnPropertyChanged并更改字典(以便显示三个冒号,而不仅仅是一个冒号)。从这一点来看,在我看来,绑定是存在的,但是字符串周围有某种类型的类型错误…?看看您的代码,您试图解决问题的方式本身就存在一些问题。为什么要在属性getter中检查所选项?还有,什么是selectedItem?一个很好的可观察字典资源:。。。如果OP坚持使用字典类型,
ListView
显示有关
selectedItem
的信息。当选择更改时,将查询新选择的项以获取新信息(其中大部分信息自上次选择(如果有)以来已更改,因此每次都会查询新生成的词典)。SelectedItem是一个MapPoint,它是一个特定于应用程序的类。我还尝试使用
ObservableCollection
,但遇到了相同的问题。我非常确定集合得到了正确的更新-调试器上的断点显示每次
selectedItem
更改时都会调用getter,正如我所预料的那样。它还返回我期望的
字典
,这反过来又添加了
ListViewItem
s。它只显示静态指定的文本(如果删除
ishitestvisible=“False”
,则显示正确的命中测试次数)。我在代码中找不到错误。根据您的描述,这不是绑定的问题。这与
词典中的数据有关。请使用
.cs
文件的代码更新您的帖子。