将listviewitemtemplate绑定到dictionarystring的Key和Value,string>

本文关键字:Value string Key listviewitemtemplate 绑定 dictionarystring | 更新日期: 2023-09-27 18:03:30

我有一个Dictionary<string,string>,其中包含一些我想在ListView中显示的数据。ListView绝对"看到"正确数量的项目(因为我从第二个TextBlock看到了适当数量的冒号),但它不显示KeyValue绑定。

我需要一个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);
    }
}

将listviewitemtemplate绑定到dictionarystring的Key和Value,string>

如果您是在事后添加项目(在应用程序启动并建立绑定链接之后),那么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" } };

        }
    }

}