Ich habe ein Objekt, das eine beobachtbare Sammlung von Strings enthält. Wie binde ich ein Datenraster, um diese Strings anzuzeigen?DataGrid an ObservableCollection von Strings in einem anderen Objekt binden
Nehmen Sie zum Beispiel:
public class Container
{
public ObservableCollection<string> strs; //This won't work, see edit!
.
.
.
}
XAML:
<DataGrid ItemsSource="{Binding Container}" AutoGenerateColumns="False" >
<DataGrid.Columns>
<DataGridTextColumn Header="Strings" Binding="{Binding}" />
</DataGrid.Columns>
</Datagrid>
Edit für die Suchende: Es gibt ein paar Dinge falsch mit dem obigen Ansatz, zunächst können Sie zu Eigenschaften von Elementen binden indem Sie einfach auf diese Eigenschaften verweisen. In diesem Fall:
ItemsSource="{Binding Container.strs}"
Zweitens ist der Inhalt einer Zeichenfolge nicht eine Eigenschaft der Saite, so
Binding="{Binding}"
Wird direkt an die Saite, anstatt zu versuchen, es ist Eigenschaften zu finden (wie als Länge)
Schließlich können Sie nicht an Felder binden, nur Eigenschaften, was ist der Unterschied?
public ObservableCollection<string> strs; //This is a field
public ObservableCollection<string> strs {get; set;} //This is property
Bonus: Wenn Sie gerade strs Instanziieren einmal dann wird der ObservableCollection mitteilen was auch immer seine Grenze, wenn geändert/in ihm auftreten, aber wenn Sie den Zeiger ändern wird es nicht, dieses Problem zu beheben Sie können eine Abhängigkeitseigenschaft verwenden!
in Visual Studio ist es am besten für diese den integrierten Code-Schnipsel zu verwenden, da es eine Menge Dinge, die in Art zu füllen: ‚propdp‘ ein und drückte zweimal Tab, in diesem Fall würden wir haben:
public ObservableCollection<string> strs
{
get { return (ObservableCollection<string>)GetValue(strsProperty); }
set { SetValue(strsProperty, value); }
}
// Using a DependencyProperty as the backing store for strs. This enables animation, styling, binding, etc...
public static readonly DependencyProperty strsProperty =
DependencyProperty.Register("strs", typeof(ObservableCollection<string>), typeof(Container), new PropertyMetadata(""));