Wpf Dictionary Binding

Wpf Dictionary Binding
2012-12-10T11:12:32+01:00
2012-12-10T13:09:16+01:00
2022-07-19T07:16:38+02:00
dante
Hello

Van egy szimpla Dictionary-m, key és value értékekkel
MyDict = new Dictionary<string, Uri> { {"First", new Uri("alma.jpg", UriKind.Relative)}, {"Second", new Uri("korte.jpg", UriKind.Relative)} };

az xaml kód így néz ki

<TextBlock Name="tblock" Text="{Binding MyDict[Second]}" FontSize="13" Width="200" Height="100"/>

Ezzel szépen visszakapom a korte.jpg elemet.

Amit én szerenék.
Lenne egy string változóm: DictKey.
Ez felveheti az adott Dictionary valamelyik Key tartalmát (jelen esetben First vagy Second)
És a textBlock ennek megfelelően változna.
De mi kell ide Bindelni?
<TextBlock Name="tblock" Text="{Binding MyDict[????]}" FontSize="13" Width="200" Height="100"/>

köszi
D.
Mutasd a teljes hozzászólást!
public string DictKey { get { ... } set { ... } // PropertyChanged a Current-re is! } public Uri Current { get { return MyDict[DictKey]; } } <TextBlock Text="{Binding Current}"

Mutasd a teljes hozzászólást!

  • ügyes.

    Ezt most elfogadom megoldásnak. Köszönöm. A Stackoverflow-n is kaptam választ. Még nem tudom melyiket fogom használni, de átgondolom.


    <TextBlock FontSize="13" Width="200" Height="30"> <TextBlock.Text> <MultiBinding> <MultiBinding.Converter> <local:DictionaryItemConverter/> </MultiBinding.Converter> <Binding Path="MyDict"/> <Binding Path="DictKey"/> </MultiBinding> </TextBlock.Text> </TextBlock>


    public class DictionaryItemConverter : IMultiValueConverter { public object Convert(object[] values, Type targetType, object parameter, System.Globalization.CultureInfo culture) { if (values != null && values.Length >= 2) { var myDict = values[0] as IDictionary; var myKey = values[1] as string; if (myDict != null && myKey != null) { //the automatic conversion from Uri to string doesn't work //return myDict[myKey]; return myDict[myKey].ToString(); } } return Binding.DoNothing; } public object[] ConvertBack(object value, Type[] targetTypes, object parameter, System.Globalization.CultureInfo culture) { throw new NotSupportedException(); } }
    Mutasd a teljes hozzászólást!
abcd