2009-03-13 20 views
0

ist neu in XAML/WPF und hat über diese seltsame Frage kommen:Databinding in einer Listenansicht

Ich habe eine Listenansicht, auf die ich eine Datasource gesetzt. Die DataSource ist eine Arraylist von "CatalogPartRows". Ich erstelle meine Spalten im Code. Ich habe dann ihre Zellenvorlagen (einige meiner Spalten enthalten Kombinationsfelder und Kontrollkästchen). Mein Problem hier ist, dass ich eine Funktion in der "CatalogPartRow" -Klasse aufrufen muss, die die Zeichenfolge abruft, die ich in einer Zelle festlegen muss.

Hier ist der Code, ich versuche zu verwenden: correct

  // THIS DOES NOT WORK 
      // 
      ObjectDataProvider ODP = new ObjectDataProvider(); 
      ODP.MethodName = "PropertyValueAsString"; 
      ODP.MethodParameters.Add(PropertyName); 
      ODP.ObjectType = typeof(CatalogPartRow); 

      Binding DataBindingText = new Binding(); 
      DataBindingText.Source = ODP; 

      // THIS WORKS 
      // 
      //String BindingPathText = /*NOXLATE*/"PropertyValues[" + CPR.IndexOf(PropertyName) + /*NOXLATE*/"]"; 
      //Binding DataBindingText = new Binding(BindingPathText); 

      FrameworkElementFactory TextBlockElement = new FrameworkElementFactory(typeof(TextBlock)); 
      TextBlockElement.SetBinding(TextBlock.TextProperty, DataBindingText); 

      FrameworkElementFactory PropertyColumnElement = new FrameworkElementFactory(typeof(Grid)); 
      PropertyColumnElement.AppendChild(TextBlockElement); 

      DataTemplate DT = new DataTemplate(); 
      DT.VisualTree = PropertyColumnElement; 

      GVC.CellTemplate = DT; 

Ist mein Ansatz?

CPR = CatalogPartRow

GVC = Gridviewcolumn

Danke, Raj.

Antwort

0

Da das Wrapping der Methode in einer Eigenschaft nicht funktioniert (da ein Parameter erforderlich ist), ist es wahrscheinlich das beste Haustier, einen Wertkonverter zu erstellen. Sie können PropertyName als Bindung für die Spalte verwenden, und dann können Sie dies in Ihrem Konverter an Ihre Methode übergeben und den Wert der Methode zurückgeben.