I have a grid view which gets its data from database using a view model:
public class MyDataSource{ MyContext context; public MyDataSource() { context = new MyContext(); this.Inbox = new ObservableCollection<GetNewData_Result>(); LoadOperation<GetNewData_Result> loadOperation = context.Load<GetNewData_Result>(context.GetNewDataQuery()); loadOperation.Completed += loadOperation_Completed; } public ObservableCollection<GetNewData_Result> Inbox { get; set; } private void loadOperation_Completed(object sender, EventArgs e) { foreach (var c in context.GetNewData_Result) { this.Inbox.Add(c); } }}
Here's my radgridview:
<telerik:RadGridView x:Name="DataGridVarde" ItemsSource="{Binding Source={StaticResource DataSource}, Path=Inbox}" AutoGenerateColumns="False"><telerik:RadGridView.Columns> <telerik:GridViewImageColumn Header="" DataMemberBinding="{Binding Path=Seen,Converter={StaticResource IsSeen}}" ImageStretch="None" /> ////
As you can see I have defined a converter for one of my fields, This field simply is a toggle image, if the value is true it shows a image otherwise it shows another image:
public object Convert(object value, Type targetType, object parameter, CultureInfo culture){ if (value is Boolean) { Boolean state = (Boolean)value; if (state) return "/Path;component/img/open.png"; else return "/Path;component/img/close.png"; } else { throw new ArgumentException("Value should be Boolean type."); }}
This works great after each post back (navigating between pages). But I want to change it without refreshing the page. Is it possible? for example when someone click on a button I want to change that column's value to false or actually invoking the converter with `False` value so that it shows another image.
I have tried this code but it doesn't work:
private void Button_Click(object sender, RoutedEventArgs e){ string code = (dataGridView.SelectedItem as GetNewData_Result).mycode; var row = (dataGridView.ItemsSource as ObservableCollection<GetNewData_Result>).FirstOrDefault(p => p.Code == code); if (row.Seen) { row.Seen = false; }
PS: I can't define a custom class that implements INotifyPropertyChange for some reasons. As you can see the data comes from a generated stored procesdure so that I can't have control to define a custom type to return by this function ( context.GetNewDataQuery() )
Any idea?
Thanks in advance