我有一个列表框,其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
我在输出窗口中收到以下消息:
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')
答案 0 :(得分:2)
我测试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}" />
祝你好运!
答案 1 :(得分:0)
我将代码更改为类并覆盖了ToString()
函数:
Public Class ColumnMetadata
Public LocalizedColumn As String
Public Description As String
Public Overrides Function ToString() As String
Return LocalizedColumn
End Function
End Class
然后我将运行时分配设置为:
Public Overrides Function ToString() As String
Return LocalizedColumn
End Function
End Class
现在一切正常。当用户单击列表框中的项目并且他们想要对类中的其他项执行某些操作时,例如将其分配给文本框,我已实现此代码:
lstDatabaseColumns.ItemsSource = ImportData.GetAddressFieldData
lstDatabaseColumns.DisplayMemberPath = "Value"
lstDatabaseColumns.SelectedValuePath = "Key"
使用该方法,我现在可以访问类的任何部分或字典的键。
我仍然有兴趣了解要设置lblColumnDescription.Text = DirectCast(lstDatabaseColumns.SelectedItem, KeyValuePair(Of String, ImportData.ColumnMetadata)).Value.Description
的内容,以便显示结构的特定成员。