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
文件的代码更新您的帖子。