2011-03-14 145 views
0

到目前爲止,我已經有了我在Xaml中設置ItemSource = {Binding}然後在.CS文件中我說listview.datacontext = myobject和視圖加載就好。但是現在我需要有一個更新爲數據更新的列表。所以經過一些研究後,我發現了ObservableCollections並重寫了我的代碼以使用它。但是當我將數據對象設置爲列表視圖時,無法顯示數據。如何讓我的WPF ListView與我的List正確綁定,以便視圖在數據更改時更新?

我的XAML:

  <ListView ItemsSource="{Binding Tests}" Name="DataCompareTests" Margin="0,0,5,0" Grid.Column="0"> 
       <ListView.View> 
        <GridView> 
         <GridViewColumn Header="TestCase" Width="200" DisplayMemberBinding="{Binding name}" /> 
        </GridView> 
       </ListView.View> 
      </ListView> 

我Xaml.cs:

readonly DataCompare dataCompare = new DataCompare(); 

public void Execute_Click(object sender, RoutedEventArgs e) 
    { 

     var Tests = new ObservableCollection<TestCases>(); 
     Tests = dataCompare.LoadTestCases(); //located in another class file 
     //DataCompareTests.DataContext = Tests; 
    } 

如果我刪除了 「測試」 在我的XAML中結合並從.DataContext行中刪除上述評論的一部分,視圖顯示正確的信息。然而,這是我的假設,如果我希望我的視圖更新爲數據,我需要在綁定中指定我的對象。我如何正確設置?我似乎無法找到正確的答案。

感謝,

傑森

回答

0

看來我的擔心毫無意義,而且我首先正確地做到了這一點。

根據MSDN:

「不過,如果你綁定到已經創建了一個對象,你需要設置> DataContext的代碼,如下面的例子 ...。 myListBox.DataContext = myDataSet;「

我的對象已經創建好了,我確實在代碼中設置了DataContext。我所要做的就是將ListView ItemSource保留爲{綁定},並且每次添加到Tests對象時,列表都會更新。

我不能相信我花了整整一天懷疑我正確地做這件事,而沒有前進檢查。 :-)

2

我認爲你需要一個更好一點熟悉綁定和一般的面向對象編程。

如果將datacontext設置爲模型對象,則「.Tests」應該是該模型對象的公共屬性。此外,不這樣做:

var someVariable = new SomeClassThatTakesWorkToConstruct(); 
someVarialbe = someOtherVariable.SomeMethod(); 

你的意思做的是這樣的: VAR someVariable = someOtherVariable.SomeMethod();

這是2個很好的理由1)你不是在浪費ObservableCollection的構造。 2)你的代碼將更容易重構(由SomeMethod返回的類型可以改變,而不必改變你的someVariable的聲明)。

編輯,額外的資源:

Databinding Overview 你已經有了指定的路徑,但指定的綁定沒有

MVVM Article 關於使用常見的MVVM WPF模式的大文章,可幫助您保持面向代碼對象,乾淨等等,即使是複雜的UI交互。

+0

我完全同意。不幸的是,我在一個「質量保證」組織中,沒有開發人員的代碼審查的好處,以更好地教育自己。我基於我的代碼來自本網站和其他地方的示例。如果您對我應該查閱的資源有任何建議,我會對此敞開大門。 – Jason 2011-03-14 18:30:01

+1

查看我的編輯。你單獨運行示例做得很好。 – marr75 2011-03-14 18:36:23

相關問題