将listviewitemtemplate绑定到dictionarystring的Key和Value,string>
本文关键字:Value string Key listviewitemtemplate 绑定 dictionarystring | 更新日期: 2023-09-27 18:03:30
我有一个Dictionary<string,string>
,其中包含一些我想在ListView
中显示的数据。ListView
绝对"看到"正确数量的项目(因为我从第二个TextBlock
看到了适当数量的冒号),但它不显示Key
或Value
绑定。
我需要一个Converter
或其他东西吗?
我需要改变和使用ObservableCollection<KeyValuePair<string,string>>
代替吗?
<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);
}
}
如果您是在事后添加项目(在应用程序启动并建立绑定链接之后),那么Dictionary<string,string>
将不是最佳选择,因为它没有实现INotifyCollectionChanged
。尝试在元素添加到字典后立即设置ItemsSource
,您将看到项目实际上出现在列表中,您只需要更新绑定。
所以,是的,ObservableCollection<T>
将是一个更理想的解决方案,因为它会在核心集合发生变化时发送通知。
试试这个,它会显示你想要的东西,但是你使用它的方式不是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" } };
}
}
}