У меня есть ListBox
с именем ListBoxView , который содержит коллекцию объектов.ListBox связан с CollectionViewSource
для фильтрации вводимых данных от пользователя.
Я хотел бы показать свойство Name объекта в ListBox
, когда это список родовыхобъект, и когда ListBox
содержит список строк, я хотел бы показать их в виде строк.Поэтому я использовал IValueConverter
для этого.Но я не могу его использовать.
Ниже приведен код того, что я пробовал:
WPF
<ListBox Grid.Row="2"
Name="BoxList"
FontFamily="Lucida Sans"
FontWeight="Light"
FontSize="13"
Margin="5"
HorizontalContentAlignment="Left"
VerticalContentAlignment="Center"
SelectionChanged="BoxList_SelectionChanged"
SelectionMode="Extended">
<ListBox.ItemTemplate>
<DataTemplate>
<ContentPresenter Content = "{Binding ElementName=BoxList,
Path=ItemsSource,
Converter={StaticResource PropertyValuNameConverter},
ConverterParameter=Name}"/>
</DataTemplate>
</ListBox.ItemTemplate>
<ListBox.ItemContainerStyle>
<Style TargetType="ListBoxItem">
<Setter Property="Height" Value="30"/>
</Style>
</ListBox.ItemContainerStyle>
</ListBox>
C #
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
var name = string.Empty;
//Check if the value is a collection and proceed
if (value.GetType().Name == typeof(List<>).Name)
{
foreach (var item in (IList)value)
{
if (item.GetType() != typeof(string))
{
var prop = item.GetType().GetProperty("Name");
var val = prop.GetValue(value, null);
name = val.ToString();
}
else
name = item.ToString();
}
return name;
}
return "Not Converted";
}
ListBox
показывает все с тем же именем, в этом примере мой список содержит {a,b,c,d,e,f,j,k}
, но показывает k
.
![enter image description here](https://i.stack.imgur.com/g6DPP.png)
После многих попыток и многих поисков в Интернете я не мог понять, в чем дело.Я не программист, пожалуйста, помогите мне понять, как решить эту проблему или куда я мог бы обратиться за помощью.Спасибо