1

別のクラスに辞書が設定されている場合、IValueConverterを適切に実装するにはどうすればよいですか?

私はここで何か間違ったことをしていると確信していますが、私の問題を正しく説明するために、ここに質問をサポートするコードがあります。

iPresenter_IconLists.cs

public interface iPresenter_IconLists
{
    Dictionary<string, IconPositionDetails> IconDetails { get; set; }
}

Presenter_IconLists.cs

public class Presenter_IconLists : iPresenter_IconLists, IValueConverter
{
    public Presenter_IconLists()
    {

    }

    public void PopulateDictionaryTest()
    {
        this.IconDetails.Add("test1", new IconPositionDetails()
        {
            x = 0,
            y = 0
        });
        this.IconDetails.Add("test2", new IconPositionDetails()
        {
            x = 0,
            y = 0
        });
        this.IconDetails.Add("test3", new IconPositionDetails()
        {
            x = 0,
            y = 0
        });
    }

    Dictionary<string, IconPositionDetails> _IconDetails = new Dictionary<string, IconPositionDetails>();
    public Dictionary<string, IconPositionDetails> IconDetails
    {
        get { return this._IconDetails; }
        set { this._IconDetails = value; }
    }

    // IValueConverter implementation
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        iPresenter_IconLists i = this;

        IconPositionDetails ipd = i.IconDetails[value.ToString()];
        // or
        // IconPositionDetails ipd = this.IconDetails[value.ToString()];

        return string.Format("x: {0}, y: {1}", ipd.x, ipd.y);
    }
}

MainWindow.xaml

<Window.Resources>
    <l:Presenter_IconLists x:Key="DictConvert" x:Name="DictConvert" />

    <TextBlock Text="{Binding Converter={StaticResource DictConvert}, ConverterParameter=Value.x}" Height="28" HorizontalAlignment="Left" Margin="60,49,0,0" VerticalAlignment="Top" FontSize="11" />
</Window.Resources>

MainWindow.xaml.cs

Presenter_IconLists iconlists;
void MainWindow_Loaded(object sender, RoutedEventArgs e)
{
    this.iconlists = new Presenter_IconLists();
    this.iconlists.PopulateDictionaryTest();

    lbIcons.ItemsSource = this.iconlists.IconDetails;
}

ここでの問題は、常に「指定されたキーが辞書に存在しなかった」ということです。this.IconDetailsのコレクション数を確認すると、ゼロでした。

Converter内の辞書にアクセスするにはどうすればよいですか?

4

2 に答える 2

0

バインディングでパスの代わりにコンバーターパラメーターを使用します。

バインディングでパスを使用します。

<DataTemplate x:Key="lbItems" x:Name="lbItems">
    <TextBlock Text="{Binding Path=Value.name, Converter={StaticResource DictConvert}}" />
</DataTemplate>

またはConvert関数でパラメーターを使用します。

IconPositionDetails ipd = i.IconDetails[parameter.ToString()];
于 2012-09-07T17:24:33.340 に答える
0

コンストラクターはアイテムを辞書に追加しないため、アイテムはありません。変換しようとすると、辞書は空です。

ある時点で、ディクショナリに値を入力する必要があります。ディクショナリは WPF ( <l:Presenter_IconLists x:Key="DictConvert" />) によって作成され、値が追加されることはないため、これは発生しません。

于 2012-09-07T16:47:19.260 に答える