Während Pro WPF in C# Lesen 2010 schreibt der Autor:Benachrichtigung ändern ohne INotifyPropertyChanged? (Auszug aus Pro WPF in C# 2010)
„Sie ein Ereignis für jede Eigenschaft erhöhen können in diesem Fall das Ereignis den Namen PropertyNameChanged (zum Beispiel hat. (UnitCostChanged). Es liegt an Ihnen, das Ereignis auszulösen, wenn die Eigenschaft geändert wird. "
Könnte jemand bestätigen, dass diese Funktion funktioniert? Ich experimentierte und nicht in der Lage, dieses Verhalten zu reproduzieren (Ich möchte sehen, ob das funktioniert so, dann kann ich einige mit System.Reflection.Emit experimentieren tun dynamische Typen erstellen)
EDIT: ich sollte die Betonung liegt hier klären
public class Employee
{
private string _FirstName;
public string FirstName
{
get
{
return _FirstName;
}
set
{
if (_FirstName != value)
{
_FirstName = value;
if (FirstNameChanged != null)
{
FirstNameChanged(this, new PropertyChangedEventArgs("FirstName"));
}
}
}
}
}
ich an ein Datagrid gebunden es und einen Timer im Hintergrund Update haben: an Änderungsbenachrichtigung OHNE Umsetzung INotifyPropertyChanged zu implementieren, als das, was ist das Buch
Hier ist die POCO ich mich entschieden behauptet die FirstName-Eigenschaft nach dem Zufallsprinzip alle paar Sekunden onds aber das Datagrid wird nie ausgelöst
<DataGrid x:Name="dgEmployees" ItemsSource="{Binding ElementName=mainWindow, Path=MyEmployees}">
<DataGrid.Columns>
<DataGridTextColumn Header="FirstName" Binding="{Binding Path=FirstName}" />
</DataGrid.Columns>
</DataGrid>
Das FirstNameChanged Ereignis immer null ist (ich dachte, das Bindungsmodul, um es automatisch anmelden kann, wenn sie es nach der Namenskonvention erkannt). MyEmployees ist nur eine ObservableCollection
Kann jemand bestätigen, wenn dieses Feature der Autor erwähnt, funktioniert tatsächlich und wenn ich einen Fehler mache?
EDIT: zugunsten von jedermann, das ich falsch interpretiert den Text meint:
„können Sie drei Ansätze, um dieses Problem zu lösen:
Sie können jede Eigenschaft in der Produktklasse machen Eine Abhängigkeitseigenschaft, die die Syntax verwendet, die Sie in Kapitel 4 gelernt haben. (In diesem Fall muss Ihre Klasse von DependencyObject abgeleitet werden.) Obwohl dieser Ansatz WPF dazu bringt, die Arbeit für Sie zu erledigen (was nett ist), macht es am meisten Sinn in Element-Klassen, die eine visuelle ap haben Schein in einem Fenster. Es ist nicht der natürlichste Ansatz für Datenklassen wie Produkt.
Sie können für jede Eigenschaft ein Ereignis auslösen. In diesem Fall muss das Ereignis den Namen PropertyNameChanged haben (z. B. UnitCostChanged). Es liegt an Ihnen, das Ereignis auszulösen, wenn die Eigenschaft geändert wird.
Sie können die Schnittstelle System.ComponentModel.INOtifyPropertyChanged implementieren, die ein einzelnes Ereignis namens PropertyChanged erfordert. Sie müssen dann das PropertyChanged-Ereignis auslösen, wenn sich eine Eigenschaft ändert, und angeben, welche -Eigenschaft geändert wurde, indem Sie den Eigenschaftsnamen als Zeichenfolge angeben. Es ist immer noch bis zu Sie dieses Ereignis, wenn ein Eigenschaftsänderungen zu erhöhen, aber Sie brauchen nicht ein separates Ereignis für jede Eigenschaft zu definieren.“
nicht sicher, ob das Syntax funktioniert, aber Sie ziemlich sicher, müssen Sie die Klasse schmücken, wie die Umsetzung INotifyPropertyChanged – Paparazzi
Nein, das ist genau das, was ich Ich versuche zu vermeiden - in dem Buch erwähnt es die 3 Techniken sind a.) DependencyProperties verwenden b.) verwenden INotifyPropertyChanged (mit denen ich bereits vertraut bin) c.) verwenden diese Konvention-basierte Ansatz, die nicht implementiert INotifyPropertyChanged. Das ist der Sinn von was ich hier teste :) – blue18hutthutt
OK verstehen, aber ich glaube nicht, dass das ist, was behauptet wird. Sie können das Ereignis direkt ohne eine NotifyPropertyChanged-Methode auslösen, aber ich denke, dass Sie INotifyPropertyChanged noch implementieren müssen. – Paparazzi