2017-04-14 125 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