1

私の ViewModel には、以下のように宣言された、監視可能な文字列コレクションのディクショナリがあります。

public Dictionary<string, ObservableCollection<string>> NamePartsDict { get; set; }

各 ComboBox がどのコレクションにバインドするかを「選択」できるように、ユーザー インターフェイスで Dictionary を ComboBoxes にバインドしたいと思います。

したがって、私の XAML では、次を使用したいと思います。

<ComboBox x:Name="comboBox" IsEditable="True"
    ItemsSource="{Binding CurrentLibrary.NamePartsDict[Year]}" Margin="80,0,0.871,0"></ComboBox>

キー「年」によってインデックス付けされたコレクションにバインドし、コレクションに格納されている文字列を ComboBox に入力することが期待されます。

ただし、この XAML は空の ComboBox になります。

Dictionary自体がバインドできることを確認しました。以下の XAML は、ComboBox に各キーと値のペアの文字列表現を設定します。

<ComboBox x:Name="comboBox" IsEditable="True"
    ItemsSource="{Binding CurrentLibrary.NamePartsDict}" Margin="80,0,0.871,0"></ComboBox>

ディクショナリから値を取得するときに、バインディング パスに何か問題がありますか? それとも、不可能なことをしようとしていますか (その場合、別の方法を見つける必要があります!)?

どんな助けでも大歓迎です!

ティム

4

2 に答える 2

0

ここのように Datatemplate を使用する必要があります: http://www.codeproject.com/Articles/47923/Using-a-different-DataTemple-when-a-WPF-ComboBox-i

于 2012-11-09T12:28:07.073 に答える
0

コンバーターを使用してこの問題を解決しました。

/// <summary>
/// Returns a 
/// </summary>
public class DomainValueConverter : IValueConverter
{
    #region IValueConverter Members

    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        ObservableCollection<DomainValue> retVal = null;
        DomainDefinitionCollection dds = value as DomainDefinitionCollection;
        if (dds != null)
        {
            retVal = dds[parameter.ToString()];
        }
        return retVal;
    }

    public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        throw new NotImplementedException();
    }

    #endregion
}

<controls:ComboBox VerticalAlignment="Center"
        DisplayMemberPath="Name"
        SelectedValuePath="Value"
        SelectedValue="{Binding ChildClientEntity.EditableEntity.EditableAttributes.TeamPosition, Mode=TwoWay}"
        ItemsSource="{Binding ChildClientEntity.Domains, Converter={StaticResource DomainValueConverter}, ConverterParameter=SiteVisitTeamPosition}" />

ここで、ConverterParameter はディクショナリ Domains へのキーです。

public Dictionary<string, ObservableCollection<DomainValue>> Domains { get; private set; }
于 2013-04-11T20:15:12.827 に答える