I Have a DataGrid bounded to SelectedQueryView.SelectedColumns where SelectedQueryView is:
public QueryViewItem SelectedQueryView { get; set; }
and QueryViewItem is:
public class QueryViewItem : ViewModelBase
{
private string _viewIcon;
private string _viewName;
private string _tableName;
public string ViewIcon
{
[DebuggerStepThrough]
get { return _viewIcon; }
[DebuggerStepThrough]
set
{
if (value != _viewIcon)
{
_viewIcon = value;
OnPropertyChanged("ViewIcon");
}
}
}
public string ViewName
{
[DebuggerStepThrough]
get { return _viewName; }
[DebuggerStepThrough]
set
{
if (value != _viewName)
{
_viewName = value;
OnPropertyChanged("ViewName");
}
}
}
public string TableName
{
[DebuggerStepThrough]
get { return _tableName; }
[DebuggerStepThrough]
set
{
if (value != _tableName)
{
_tableName = value;
OnPropertyChanged("TableName");
}
}
}
public ObservableCollection<TableColumn> SelectedColumns { get; set; }
}
And, TableColumn is:
public class TableColumn : ViewModelBase
{
private string _tableSource;
public string TableSource
{
[DebuggerStepThrough]
get { return _tableSource; }
[DebuggerStepThrough]
set
{
if (value != _tableSource)
{
_tableSource = value;
OnPropertyChanged("TableSource");
}
}
}
private string _colName;
public string ColName
{
[DebuggerStepThrough]
get { return _colName; }
[DebuggerStepThrough]
set
{
if (value != _colName)
{
_colName = value;
OnPropertyChanged("ColName");
}
}
}
private string _customName;
public string CustomName
{
[DebuggerStepThrough]
get { return _customName; }
[DebuggerStepThrough]
set
{
if (value != _customName)
{
_customName = value;
OnPropertyChanged("CustomName");
}
}
}
public override string ToString()
{
string sRet;
if(ColName.Equals("*"))
sRet = TableSource + "." + ColName;
else
sRet = TableSource + "." + ColName + " AS " + CustomName;
return sRet;
}
}
And, finally, ViewModelBase is:
public class ViewModelBase : INotifyPropertyChanged { public event PropertyChangedEventHandler PropertyChanged;
protected virtual void OnPropertyChanged(object sender, PropertyChangedEventArgs e)
{
if (PropertyChanged != null)
PropertyChanged(sender, e);
}
protected virtual void OnPropertyChanged(string PropertyName)
{
OnPropertyChanged(this, new PropertyChangedEventArgs(PropertyName));
}
}
The problem is that, when I add a field to SelectedQueryView.SelectedColumns, the associated DataGrid is not updated, even if SelectedColumns is an ObservableCollection.
Xaml
<DataGrid Grid.Row="0" Grid.Column="2" ItemsSource="{Binding Path=SelectedQueryView.SelectedColumns}" BorderBrush="Black" Margin="5" SelectedItem="{Binding Path=SelectedDestColumn}" AutoGenerateColumns="False" GridLinesVisibility="None" CanUserAddRows="False" RowEditEnding="DataGrid_RowEditEnding" RowHeaderWidth="0" Background="White">
<DataGrid.Columns>
<DataGridTextColumn Header="Name" Width="*" Binding="{Binding Path=ColName}" IsReadOnly="True"/>
<DataGridTextColumn Header="Custom Name" Width="*" Binding="{Binding Path=CustomName}" />
</DataGrid.Columns>
</DataGrid>
Can someone explain me why and how to solve this problem?