长话短说,我的应用程序有一部分包含一系列绑定到 Xaml 中的对象实例的列表框。使用IValueConverter
,我能够<Part>
从主对象.ToString()
中检索对象列表并显示检索到的对象的形式。但是,我想要做的是显示Name
对象的属性。我将 设置DisplayMemberPath
为Name
但结果仅将listboxitem
. 我已经在下面发布了代码的相关部分:
XAML:
<Window.Resources>
<local:LocationtoEquipmentCOnverter x:Key="locationEquipmentFiller" />
</Window.Resources>
<Window.DataContext>
<local:MegaWdiget/>
</Window.DataContext>
<ListBox x:Name="listboxFront" HorizontalAlignment="Left" Margin="180,45,0,0" VerticalAlignment="Top" Width="82" Opacity="0.5" ItemsSource="{Binding ConverterParameter=Front, Converter={StaticResource locationEquipmentFiller}, Mode=OneWay}" DisplayMemberPath="Name"/>
值转换器:
public class LocationtoEquipmentCOnverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
MegaWidget MWidget = (MegaWidget)value;
Location loc = MWidget.Locations[(string)parameter];
return loc.Contents;
}
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
throw new NotImplementedException();
}
}
MegaWidget 对象包含以下内容:
[XmlElement]
public Dictionary<string, Location> Locations { get; set; }
位置对象包含一个列表,其中包含我需要查询其名称的实际对象:
public List<Part> Contents;
找到解决方案
在继续按照 Mate 推荐的故障排除路线后,我发现传递的对象是 Part 对象而不是 ListBoxItems。这导致ListBox
填充实际对象而不是 ListBoxItems。通过更改ValueConverter
传递List
ListBoxItems 并将内容标记设置为我需要的内容,ListBoxes 可以正确填充。我在下面的问题区域中列出了解决方案: