2012-09-14 14 views

Odpowiedz

12

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" }); 
    } 
} 
+0

Ok, ale dlaczego? I dlaczego, jeśli usunę ten wiersz, nie mogę dodać żadnego nowego obiektu do mojego ListView? – gliderkite

+0

@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. –

+0

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

2

To znaczy "DataContext jest właścicielem tego obiektu DataContext" Tak kontrolą.

W języku C# byłoby

myTextBox.DataContext = myTextBox; 
0

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 :-)

Powiązane problemy