2017-04-14 124 views
0

我有一個名爲ListViewModel模型一個方法:的ListView DataBindig使用MVVM(WPF,ListView控件,綁定)

namespace LayoutMVVM.ViewModels 
{ 
    public class ListViewModel 
    { 
     public void getData() 
     { 
     testViewClassDataContext tv = new testViewClassDataContext(); 
     List<test_view> tvq = (from tt in tv.test_views 
           select tt).ToList(); 
     } 
    } 
} 

進入我的用戶叫的ListView我想從模型結果和綁定到列表:

ListView.xaml:

<UserControl .....>  
    <Grid Background="Crimson"> 

     <ListView Width="230" Height="250" Name="lvMyList"> 
      <ListView.View> 
       <GridView> 
        <GridViewColumn Header="FirstName" Width="90" DisplayMemberBinding="{Binding FirstName}" /> 
        <GridViewColumn Header="LastName" Width="90" DisplayMemberBinding="{Binding LastName}" /> 
        <GridViewColumn Header="Type" Width="50" DisplayMemberBinding="{Binding Type}" /> 
       </GridView> 
      </ListView.View> 
     </ListView> 

    </Grid> 
</UserControl> 

ListView.cs

namespace LayoutMVVM.Views 
{ 
    public partial class ListView : UserControl 
    { 
     public ListView() 
     { 
      InitializeComponent(); 

      ListViewModel lvm = new ListViewModel(); 
      lvMyList.ItemsSource = lvm.getData(); //error 
     } 
    } 
} 

我開始使用WPF,不知道如何correclty綁定數據。

回答

4

也許你應該改變方法如下,這樣的方法會返回實際結果,

public List<test_view> getData() 
    { 
     testViewClassDataContext tv = new testViewClassDataContext(); 
     List<test_view> tvq = (from tt in tv.test_views 
           select tt).ToList(); 
     return tvq; 
    } 
+0

@@ Sajeetharan - 謝謝,有一個問題:它可以與MVVM或我應該改變什麼? – 4est

+0

是的,它是完全正確的 – Sajeetharan

+0

謝謝,因爲Naresh寫道使用this.DataContext = lvm ....而不是我的lvMyList.ItemsSource = lvm.getData(); – 4est

1

Sajeetharan的答案看起來不錯,但如果你想繼續用MVVM,替代落後這樣的代碼代碼:

namespace LayoutMVVM.Views 
{ 
    public partial class ListView : UserControl 
    { 
     public ListView() 
     { 
      InitializeComponent(); 
      ListViewModel lvm = new ListViewModel(); 
      this.DataContext = lvm; //this is what you are missing     
     } 
    } 
} 

和分配的ListView ItemsSouce在XAML這樣的:

 <ListView Width="230" Height="250" Name="lvMyList" ItemsSource="{Binding tvq}" > 
      <ListView.View> 
       <GridView> 
        <GridViewColumn Header="FirstName" Width="90" DisplayMemberBinding="{Binding FirstName}" /> 
        <GridViewColumn Header="LastName" Width="90" DisplayMemberBinding="{Binding LastName}" /> 
        <GridViewColumn Header="Type" Width="50" DisplayMemberBinding="{Binding Type}" /> 
       </GridView> 
      </ListView.View> 
     </ListView> 

您將不得不創建列表屬性List(或ObservableCollection)「tvq」,並通過在ViewModel中調用getData()來填充它。

我建議你閱讀更多關於MVVM和綁定。快樂編碼!

+0

他直接設置itemsource,所以如果getdata()方法返回一些東西,它應該工作,不用設置datacontext。 – CiccioRocca

+0

@CiccioRocca:明白了你的觀點。Bt反正如果他想用MVVM去,我想我的答案會很有用。 –

+0

是的,這是一個很好的建議,但是他的程序不起作用的原因與DataContext無關,但它是getData方法是一個Void的事實,所以行:lvMyList.ItemsSource = lvm.getData();沒有任何意義。 – CiccioRocca

0

我加入這個響應整合什麼在前面響應被告知:

首先改變方法的getData如告訴你Sajeetharan:

public List<test_view> getData() 
    { 
     testViewClassDataContext tv = new testViewClassDataContext(); 
     List<test_view> tvq = (from tt in tv.test_views 
           select tt).ToList(); 
     return tvq; 
    } 

做的第二件事是改變後面的代碼作爲告訴你納雷什Ravlani:

public partial class ListView : UserControl 
    { 
     public ListView() 
     { 
      InitializeComponent(); 
      ListViewModel lvm = new ListViewModel(); 
      this.DataContext = lvm; //this is what you are missing     
     } 
    } 

三要注意的是,相當於你也告訴你認爲列表有一個的ItemsSource:

 <ListView Width="230" Height="250" Name="lvMyList" ItemsSource="{Binding}" > 
      <ListView.View> 
       <GridView> 
        <GridViewColumn Header="FirstName" Width="90" DisplayMemberBinding="{Binding FirstName}" /> 
        <GridViewColumn Header="LastName" Width="90" DisplayMemberBinding="{Binding LastName}" /> 
        <GridViewColumn Header="Type" Width="50" DisplayMemberBinding="{Binding Type}" /> 
       </GridView> 
      </ListView.View> 
     </ListView> 

看看這個:

<ListView Width="230" Height="250" Name="lvMyList" ItemsSource="{Binding}" > 

請注意,你要告訴給ListView使用數據綁定把它的ItemSource從DataContext的(的ItemSource = 「{結合}」)。

我希望它能幫助你!

+0

@@ CiccioRocca它的工作沒有this.DataContext = lvm; – 4est