別のクラスに辞書が設定されている場合、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内の辞書にアクセスするにはどうすればよいですか?