Ich habe das Gefühl, dass mir hier etwas fehlt, aber ich habe dieses Datagrid, das sich automatisch neu zeichnet, wenn sich die Datenquelle ändert, ohne dass es dafür einen logischen Grund gibt.
Ich bin das Datagrid an eine DataView-Eigenschaft gebunden, die INotifyPropertyChanged implementiert, und ich möchte einige andere Dinge tun, wenn dieses Ereignis ausgelöst wird, bevor Refresh() aufgerufen wird.
Hier ist also die Datenquelle.
public class MainScreenDataView : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
void OnPropertyChanged(string name)
{
PropertyChangedEventHandler handler = PropertyChanged;
if (handler != null)
{
handler(this, new PropertyChangedEventArgs(name));
}
}
DataView _dataview;
public DataView GetDataView
{
get { return _dataview; }
set
{
_dataview = value;
OnPropertyChanged("GetDataView");
}
}
public MainScreenDataView()
{
}
}
Und die Bindung (ich rufe dies im Konstruktor des Fensters auf)
public void MakeData()
{
MiddleMan midman = MiddleMan.Instance;
midman.PropertyChanged += new System.ComponentModel.PropertyChangedEventHandler(midman_PropertyChanged); //unrelated event for error messages
midman.InstantiateAll();
Binding bind = new Binding();
bind.Source = midman.GetDict["contact"].GetDataView; //GetDict is a dictionary that holds instances of MainScreenDataView
bind.UpdateSourceTrigger = UpdateSourceTrigger.Explicit;
DG_Contacts.SetBinding(BetterDataGrid.ItemsSourceProperty, bind);
}
Die Klasse, die die DataView mit Daten aus einer Datenbank aktualisiert, hat Zugriff auf dieselbe Instanz von MainScreenDataView wie das Fenster. Die Instanz wird in einem Singleton in einem Dictionary aufbewahrt.
Jetzt sehe ich keinen Grund, warum sich das Datagrid selbst aktualisieren würde. Ich habe sogar versucht, INotifyPropertyChanged aus MainScreenDataview zu entfernen, und dennoch bleibt das Verhalten dasselbe.
Ich vermute, dass mir hier etwas fehlt. Standardverhalten irgendwo, das überschrieben werden muss oder so etwas?