wpf binding dictionary

WPF binding textbox to dictionary entry



(1)

Intento vincular un cuadro de texto wpf a un diccionario ubicado en un modelo de vista. El viewmodel se usa como datacontext para la vista. Encontré muchos ejemplos y suena simple, pero no funcionará para mí.

Ver:

TextBox x: Name = "txbTest" Grid.Row = "10" Grid.Column = "2" Text = "{Encuadernación MyDict [First]}"

ViewModel:

public Dictionary<string, string> MyDict = new Dictionary<string, string> { {"First", "Test1"}, {"Second", "Test2"} };

Intento todas las variantes que encontré

Text="{Binding MyDict[First]}" Text="{Binding Path=MyDict[First]}" Text="{Binding MyDict[First].Text}" Text="{Binding MyDict[First].Value}"

Pero nada funciona, textbox está vacío. ¿Alguna idea?


Hay un error de enlace en su código porque MyDict no es una propiedad. Tienes que vincular a una Property y no a un Field

System.Windows.Data Error: 40 : BindingExpression path error: ''MyDict'' property not found on ''object'' ''''MainWindow'' (Name='''')''. BindingExpression:Path=MyDict[First]; DataItem=''MainWindow'' (Name=''''); target element is ''TextBox'' (Name=''textBox1''); target property is ''Text'' (type ''String'')

Cambie el Field MyDict a una Property como se muestra a continuación

private Dictionary<string, string> _MyDict; public Dictionary<string, string> MyDict { get { return _MyDict; } set { _MyDict = value; } }

En el constructor de tu ViewModel inicializa MyDict.

MyDict = new Dictionary<string, string> { {"First", "Test1"}, {"Second", "Test2"} };

Las siguientes dos variantes no funcionarán ya que MyDict ["key"] devuelve una string y la string no tiene una propiedad Text o Value . Las otras dos variantes deberían funcionar.

Text="{Binding MyDict[First].Text}" Text="{Binding MyDict[First].Value}"