我有一个列表框,其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}" />
祝好运!