C# 使用MVVM的ListView DataIndig(WPF、ListView、绑定)

C# 使用MVVM的ListView DataIndig(WPF、ListView、绑定),c#,wpf,listview,mvvm,model-binding,C#,Wpf,Listview,Mvvm,Model Binding,我使用一种方法创建了名为ListViewModel的模型: namespace LayoutMVVM.ViewModels { public class ListViewModel { public void getData() { testViewClassDataContext tv = new testViewClassDataContext(); List<test_view> tvq = (fr

我使用一种方法创建了名为ListViewModel的模型:

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();
        }
    }
}

我从WPF开始,不知道如何正确绑定数据。

可能您应该按如下方式更改方法,以便该方法返回实际结果

public List<test_view> getData()
    {
        testViewClassDataContext tv = new testViewClassDataContext();
        List<test_view> tvq = (from tt in tv.test_views
                               select tt).ToList();
        return tvq;
    }
public List getData()
{
testViewClassDataContext tv=新的testViewClassDataContext();
列出tvq=(从tv.test_视图中的tt
选择tt.ToList();
返回tvq;
}

您可能应该如下更改该方法,以便该方法返回实际结果

public List<test_view> getData()
    {
        testViewClassDataContext tv = new testViewClassDataContext();
        List<test_view> tvq = (from tt in tv.test_views
                               select tt).ToList();
        return tvq;
    }
public List getData()
{
testViewClassDataContext tv=新的testViewClassDataContext();
列出tvq=(从tv.test_视图中的tt
选择tt.ToList();
返回tvq;
}

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 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>
并按如下方式在XAML中分配ListView的ItemsSuce:

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

您必须创建一个列表属性列表(或ObservableCollection)“tvq”,并通过调用ViewModel中的getData()来填充它


我建议您阅读更多关于MVVM和绑定的内容。快乐编码

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 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>
并按如下方式在XAML中分配ListView的ItemsSuce:

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

您必须创建一个列表属性列表(或ObservableCollection)“tvq”,并通过调用ViewModel中的getData()来填充它


我建议您阅读更多关于MVVM和绑定的内容。快乐编码

我添加此响应是为了整合上一个响应中的内容:

首先,按照Sajeetharan告诉您的更改方法getData:

public List<test_view> getData()
    {
        testViewClassDataContext tv = new testViewClassDataContext();
        List<test_view> tvq = (from tt in tv.test_views
                               select tt).ToList();
        return tvq;
    }
第三,请注意,您也告诉您的视图,列表中有一个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=“{Binding}”)从Datacontext获取其itemsource


我希望它能帮助你

我添加此响应是为了整合上一个响应中的内容:

首先,按照Sajeetharan告诉您的更改方法getData:

public List<test_view> getData()
    {
        testViewClassDataContext tv = new testViewClassDataContext();
        List<test_view> tvq = (from tt in tv.test_views
                               select tt).ToList();
        return tvq;
    }
第三,请注意,您也告诉您的视图,列表中有一个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=“{Binding}”)从Datacontext获取其itemsource



我希望它能帮助你

他正在直接设置itemsource,因此,如果getdata()方法将返回某些内容,那么它应该在不设置datacontext的情况下仍能工作。@CiccioRocca:明白了。不管怎样,如果他想使用MVVM,我想我的答案会很有用。是的,这是一个很好的建议,但他的程序不工作的原因与DataContext无关,但事实是getData方法是一个空的,因此行:lvMyList.ItemsSource=lvm.getData();没有任何意义。那么如何使用data his.DataContext=lvm加载数据呢?正如Sajeetharan所说,在我改变方法之后,我使用lvMyList.ItemsSource=lvm.getData()@4est现在您已经按照Sajeetharan所说的更改了getData,您可以按照Naresh Ravlani的建议将Itemssource与数据绑定一起设置。合并两个答案;)他正在直接设置itemsource,因此,如果getdata()方法将返回某些内容,那么它应该在不设置datacontext的情况下仍能工作。@CiccioRocca:明白了。不管怎样,如果他想使用MVVM,我想我的答案会很有用。是的,这是一个很好的建议,但他的程序不工作的原因与DataContext无关,但事实是getData方法是一个空的,因此行:lvMyList.ItemsSource=lvm.getData();没有任何意义。那么如何使用data his.DataContext=lvm加载数据呢?正如Sajeetharan所说,在我改变方法之后,我使用lvMyList.ItemsSource=lvm.getData()@4est现在您已经按照Sajeetharan所说的更改了getData,您可以按照Naresh Ravlani的建议将Itemssource与数据绑定一起设置。合并两个答案;)@@Sajeetharan-谢谢,一个问题:MVVM没问题,或者我应该做些改变吗?是的,非常好,谢谢,因为Naresh写了这个。DataContext=lvm…,而不是我的lvMyList.ItemsSource=lvm.getData()@@Sajeetharan-谢谢,一个问题:MVVM没问题,或者我应该做些改变吗?是的,非常好,谢谢,因为Naresh写了这个。DataContext=lvm…,而不是我的lvMyList.ItemsSource=lvm.getData()@@CiccioRocca它在没有这个的情况下工作。DataContext=lvm@@CiccioRocca它在没有这个的情况下工作。DataContext=lvm;