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}"