I'm new to WPF framework. Data binding for property 'Text' of textbox is not working. Not sure if there's anything wrong with the code?
I have a listbox named 'ConfigListBox' and a textbox named 'NameTextBox'.
<ListBox x:Name="ConfigListBox" Grid.Row="0" Loaded="ConfigListBox_OnLoaded">
<ListBox.ItemTemplate>
<DataTemplate DataType="MyApp:Config">
<WrapPanel>
<CheckBox Margin="0, 0, 2, 0"/>
<TextBlock Text="{Binding Name}" />
</WrapPanel>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
<TextBox Name="NameTextBox" Grid.Column="1" Grid.Row="0" Text="{Binding SelectedConfig.Name}"></TextBox>
Object _selectedConfig is the instance of the selected item of ConfigListBox. _selectedConfig will be updated when ConfigListBox is on selected index changed event.
public partial class MainWindow : Window, INotifyPropertyChanged
{
private List<Config> _configs = new List<Config>();
private Config _selectedConfig;
public Config SelectedConfig
{
get => _selectedConfig;
set
{
_selectedConfig = value;
OnPropertyChanged();
}
}
public MainWindow()
{
InitializeComponent();
}
public event PropertyChangedEventHandler PropertyChanged;
[NotifyPropertyChangedInvocator]
protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = null)
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
}
Config class has implemented the INotifyPropertyChanged interface.
class Config : INotifyPropertyChanged
{
public string Name { get; set; }
public event PropertyChangedEventHandler PropertyChanged;
[NotifyPropertyChangedInvocator]
protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = null)
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
}
Found data context element: ? DataItem=null?, Detailed logs:
System.Windows.Data Warning: 67 : BindingExpression (hash=55056607): Resolving source
System.Windows.Data Warning: 70 : BindingExpression (hash=55056607): Found data context element: <null> (OK)
System.Windows.Data Warning: 74 : Lookup name _selectedConfig: queried TextBox (hash=14620943)
System.Windows.Data Warning: 67 : BindingExpression (hash=55056607): Resolving source
System.Windows.Data Warning: 70 : BindingExpression (hash=55056607): Found data context element: <null> (OK)
System.Windows.Data Warning: 74 : Lookup name _selectedConfig: queried TextBox (hash=14620943)
System.Windows.Data Warning: 67 : BindingExpression (hash=55056607): Resolving source
System.Windows.Data Warning: 70 : BindingExpression (hash=55056607): Found data context element: <null> (OK)
System.Windows.Data Warning: 74 : Lookup name _selectedConfig: queried TextBox (hash=14620943)
System.Windows.Data Warning: 67 : BindingExpression (hash=55056607): Resolving source (last chance)
System.Windows.Data Warning: 70 : BindingExpression (hash=55056607): Found data context element: <null> (OK)
System.Windows.Data Warning: 74 : Lookup name _selectedConfig: queried TextBox (hash=14620943)
System.Windows.Data Error: 4 : Cannot find source for binding with reference 'ElementName=_selectedConfig'. BindingExpression:Path=Name; DataItem=null; target element is 'TextBox' (Name='NameTextBox'); target property is 'Text' (type 'String')
Name
property doesn't useOnPropertyChanged
– styx