0

簡単に言うと、Xaml のオブジェクト インスタンスにバインドされた一連のリスト ボックスを含むアプリケーションのセクションがあります。を使用して、マスター オブジェクトからオブジェクトIValueConverterのリストを取得し、取得したオブジェクトのフォームを表示することができました。しかし、私がやりたいのは、代わりにオブジェクトのプロパティを表示することです。を に設定しましたが、結果は. 以下のコードの関連部分を投稿しました。<Part>.ToString()NameDisplayMemberPathNamelistboxitem

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"/>

ValueConverter:

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; }

Location オブジェクトには、名前を照会する必要がある実際のオブジェクトを含むリストが含まれています。

 public List<Part> Contents;

解決策が見つかりました

Mate が推奨するトラブルシューティングを続けたところ、渡されたオブジェクトが ListBoxItems ではなく Part オブジェクトであることがわかりました。これにより、ListBoxListBoxItems ではなく、実際のオブジェクトで満たされています。ValueConverterコンテンツ タグが必要なものに設定された ListBoxItemsを渡すように変更することListで、ListBoxes が適切に読み込まれます。以下の質問領域に解決策をリストしました。

4

3 に答える 3

2

Mate が推奨するトラブルシューティングを続けたところ、渡されたオブジェクトが ListBoxItems ではなく Part オブジェクトであることがわかりました。これにより、ListBoxItems ではなく、実際のオブジェクトで ListBox が満たされました。ValueConverter を変更して、コンテンツ タグが必要なものに設定された ListBoxItems のリストを渡すことで、ListBoxes が適切に読み込まれます。

新しい ValueConverter:

public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
    MegaWidget MWidget = (MegaWidget)value;
    Location loc = MWidget.Locations[(string)parameter];
    List<ListBoxItem> displayContent = new List<ListBoxItem>();

    foreach (Part item in loc.Contents)
    {
        ListBoxItem lbi = new ListBoxItem();
        lbi.Content = item.Name;
        displayContent.Add(lbi);
    }

    return displayContent;
}
于 2012-10-07T14:38:03.217 に答える
1

「DisplayMemberPathを追加せずに継承(system.MWidget.Part)を表示する場合」という回答に基づいて、プロパティ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];

        //Refers to Class "Content" used in loc.Contents collection. I do not know what the name that you have used
        foreach (Content item in loc.Contents)
        {
            item.Name += "***";
        }

        return loc.Contents;
    }

    public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        throw new NotImplementedException();
    }
}
于 2012-10-07T07:33:56.343 に答える