У меня есть DataGrid, который связан с ObservableCollection <"Product">.Столбцы привязаны к свойствам Product.Большинство из них имеют тип double? (Nullable).
Через некоторое время мне нужно установить какое-либо свойство в null.После этого, независимо от того, какое значение я установил, привязка не работает.Значение не обновляется в представлении.
Что происходит с привязкой, когда я устанавливаю свойство в null?
Я пробовал то, что показано в этом сообщении в блоге http://wildermuth.com/2009/11/18/Data_Binding_Changes_in_Silverlight_4, номне это не сработало.
Спасибо!
Редактировать: Ниже приведен класс, который я создал, который реализует INotifyPropertyChanged
public class NotifyPropertyChangedAttribute : INotifyPropertyChanged
{
Dictionary<string, object> _propBag = new Dictionary<string, object>();
protected object Get(string propName)
{
object value = null;
_propBag.TryGetValue(propName, out value);
return value;
}
protected void Set(string propName, object value)
{
if (!_propBag.ContainsKey(propName) || Get(propName)!=null)
{
_propBag[propName] = value;
OnPropertyChanged(new PropertyChangedEventArgs(propName));
}
}
public event PropertyChangedEventHandler PropertyChanged;
protected virtual void OnPropertyChanged(PropertyChangedEventArgs e)
{
if (PropertyChanged != null)
PropertyChanged(this, e);
}
}
Это мой продукт класса.Свойство ItemsSource DataGrid связано с набором объектов ObservableCollection:
public class Product : NotifyPropertyChangedAttribute
{
public string Name
{
get { return (string)Get("Name") ?? ""; }
set { Set("Name", value); }
}
public double? Price
{
get {return (double)Get("Price") ?? null;}
set { Set("Price", value);}
}
public void Reset()
{
var propertyInfo = typeof(Product).GetProperties(BindingFlags.DeclaredOnly | BindingFlags.Public | BindingFlags.Instance);
foreach (var p in propertyInfo)
{
p.SetValue(this , null, null);
}
}
}
Посмотрите метод Reset ().Привязка перестает работать после вызова этого метода.В моем приложении мне нужно, чтобы, когда пользователь нажимал клавишу «Del», строка DataGrid становилась пустой, но не могла быть удалена.