我有一个列表框,其ItemsSource设置为Dictionary(Of String, ColumnMetadata)ColumnMetadata是一个结构。我可以通过将DisplayMemberPath设置为"Key"来轻松显示DisplayMemberPath,但是我不知道如何获取它来显示结构的成员。

我尝试将"{Binding LocalizedColumn}"设置为"Value.LocalizedColumn""LocalizedColumn""{Value.LocalizedColumn}",但这些都不起作用。我在列表框中只看到一堆空白行。

我要做的就是将数据放入列表框。我不关心对字典的任何更新,并且在填充列表后将不会更新字典。

我现在拥有的代码在运行时激活:

        lstDatabaseColumns.ItemsSource = ImportData.GetAddressFieldData
        lstDatabaseColumns.DisplayMemberPath = "Value.LocalizedColumn"
        lstDatabaseColumns.SelectedValuePath = "Key"

我的结构如下:
    Public Structure ColumnMetadata
        Dim LocalizedColumn As String
        Dim Description As String
    End Structure

我在输出窗口中收到以下消息:
ojit_code
System.Windows.Data Error: 40 : BindingExpression path error: 'LocalizedColumn' property not found on 'object' ''ColumnMetadata' (HashCode=1118531966)'. BindingExpression:Path=Value.LocalizedColumn; DataItem='KeyValuePair`2' (HashCode=-1578744570); target element is 'TextBlock' (Name=''); target property is 'Text' (type 'String')

最佳答案

我测试了DisplayMemberPath="Value.MyValue",效果很好。

样本数据为:

public class MyClass
{
    public string MyValue { get; set; }
}

public Dictionary<int, MyClass> Data
 {
     get
     {
         Dictionary<int, MyClass> data = new Dictionary<int, MyClass>();
         data[0] = new MyClass { MyValue = "A" };
         data[1] = new MyClass { MyValue = "B" };

         return data;
     }
 }

Xaml:
 <ListBox DisplayMemberPath="Value.MyValue" x:Name="lst" ItemsSource="{Binding ElementName=local, Path=Data}" />

祝好运!

10-08 18:53