DataGridのウィジェットがObservableCollection < "Product">にバインドされています。列は、Productのプロパティにバインドされています。そのうち大部分はdouble型ですか(ヌル可能)。プロパティ値をnullに設定した後にバインドが機能しない
いくつかのプロパティを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);
}
}
これは私のProductクラスを実装し、私が作成したクラスです。 DataGridのItemsSourceプロパティは、Productsの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の行は空になりますが、削除することはできません。
xamlとviewmodelのプロパティの1つを投稿してください。 – gaurawerma