Czy ktoś może mi wyjaśnić następującą linię XAML?DataContext i bindowanie jako RelativeSource
DataContext="{Binding RelativeSource={RelativeSource Self}}"
Here prosty przykład użycia.
Jak zamienić tę linię na kod C#
?
Czy ktoś może mi wyjaśnić następującą linię XAML?DataContext i bindowanie jako RelativeSource
DataContext="{Binding RelativeSource={RelativeSource Self}}"
Here prosty przykład użycia.
Jak zamienić tę linię na kod C#
?
Po prostu ustawia właściwość DataContext
równą obiektowi z właściwością. Odpowiednik kodu byłoby this.DataContext = this;
Edit
Obiekt DataContext
jest przedmiotem, który jest używany jako kontekst dla wszystkich powiązań, które występują na tym obiekcie i jego obiektów podrzędnych. Jeśli nie masz prawidłowo ustawionego modelu, z którym chcesz się połączyć, wszystkie twoje powiązania się nie powiodą.
Edit2
Oto jak ustawić go w kodzie tyłu (pasujących przykład):
public partial class ListViewTest : Window
{
ObservableCollection<GameData> _GameCollection =
new ObservableCollection<GameData>();
public ListViewTest()
{
_GameCollection.Add(new GameData {
GameName = "World Of Warcraft",
Creator = "Blizzard",
Publisher = "Blizzard" });
_GameCollection.Add(new GameData {
GameName = "Halo",
Creator = "Bungie",
Publisher = "Microsoft" });
_GameCollection.Add(new GameData {
GameName = "Gears Of War",
Creator = "Epic",
Publisher = "Microsoft" });
InitializeComponent();
this.DataContext = this; //important part
}
public ObservableCollection<GameData> GameCollection
{ get { return _GameCollection; } }
private void AddRow_Click(object sender, RoutedEventArgs e)
{
_GameCollection.Add(new GameData {
GameName = "A New Game",
Creator = "A New Creator",
Publisher = "A New Publisher" });
}
}
To znaczy "DataContext jest właścicielem tego obiektu DataContext" Tak kontrolą.
W języku C# byłoby
myTextBox.DataContext = myTextBox;
Aby odpowiedzieć na drugie pytanie: Sometime może być przydatna do deklarowania DataContext na XAML, ponieważ można zobaczyć wiązania z danymi w czasie projektowania. Jeśli zadeklarujesz to za pomocą kodu, wiązanie danych zostanie wykonane tylko w środowisku wykonawczym.
Istnieją inne sposoby uzyskania danych o czasie projektowania (fałszywych). Aby dowiedzieć się więcej, zapytaj o "giętkość".
Uwaga: Zgodnie z ogólną zasadą, należy pamiętać, że jeśli masz inne pytanie, należy utworzyć nowe żądanie stackoverflow :-)
Ok, ale dlaczego? I dlaczego, jeśli usunę ten wiersz, nie mogę dodać żadnego nowego obiektu do mojego ListView? – gliderkite
@gliderkite Jeśli robisz przykład, który łączysz, domyślam się, że obiekty są poprawnie dodawane do 'ObservableCollection', ale wiązanie się nie udaje. –
Tak, chcę wiedzieć, dlaczego w przykładzie on ustawia DataContext w ten sposób, a jeśli istnieje sposób, aby nie używać linii XAML. – gliderkite