2012-08-10 4 views
8

Ich verwende Fody in einem SilverLight-Projekt, um Eigenschaftsabhängigkeiten automatisch zu generieren. Es funktioniert jedoch nicht, wenn Setter bereits einen Methodenaufruf RaisePropertyChanged enthalten.Wie Web-Service-Referenz ohne INotifyPropertyChanged generieren?

Eine Problemumgehung könnte sein, Web-Service-Referenzcode ohne INotifyPropertyChanged zu generieren und stattdessen in einer partiellen Methode zu implementieren.

Wie kann ich Web-Service-Referenzcode ohne INotifyPropertyChanged generieren?

Ich habe einen WCF-Dienst, nennen wir es MaterialService.svc. Es sieht etwa so aus:

[ServiceContract] 
public interface IMaterialService 
{ 
    [OperationContract] 
    Material GetMaterial(int id); 
} 

[DataContract] 
public class Material 
{ 
    [DataMember] 
    public int ID { get; set; } 

    [DataMember] 
    public string Name { get; set; } 
} 

Wenn ich den Dienst als Dienstverweis hinzufügen und Client-Code erzeugen, wird jede Klasse gesetzt INotifyPropertyChanged implementieren:

public partial class Material : object, System.ComponentModel.INotifyPropertyChanged { 

    private int IDField; 

    private string NameField; 

    [System.Runtime.Serialization.DataMemberAttribute()] 
    public int ID { 
     get { 
      return this.IDField; 
     } 
     set { 
      if ((this.IDField.Equals(value) != true)) { 
       this.IDField = value; 
       this.RaisePropertyChanged("ID"); 
      } 
     } 
    } 

    [System.Runtime.Serialization.DataMemberAttribute()] 
    public System.Nullable<string> Name { 
     get { 
      return this.NameField; 
     } 
     set { 
      if ((this.NameField.Equals(value) != true)) { 
       this.NameField = value; 
       this.RaisePropertyChanged("Name"); 
      } 
     } 
    } 
} 

Wie kann ich Client-Code generieren, die doesn Implementiere nicht INotifyPropertyChanged?

Antwort

13

Nachdem Sie die Servicereferenz hinzugefügt haben, öffnen Sie die Datei Reference.svcmap unter der Servicereferenz (möglicherweise müssen Sie die Option "Alle Dateien anzeigen" im Menü "Projekt" aktivieren). Dort finden Sie das <EnableDataBinding> Element, und ändern Sie den Wert in false. Das wird die INotifyPropertyChanged aus den generierten Datenverträgen entfernen.

+0

Es funktioniert, vielen Dank :) Für jeden, der das gleiche Problem wie ich re Fody, ich kontaktierte Simon Cropp und er machte eine neue Version, die bestehende RaisePropertyChanged Anrufe unterstützt, so dass auch das Problem behoben, aber immer noch das ist schön wissen :) –

Verwandte Themen