簡體   English   中英

使用MVVM的ListView DataBindig(WPF,ListView,綁定)

[英]ListView DataBindig using MVVM (WPF, ListView, Binding)

我有一種方法叫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();
        }
    }
}

進入名為ListView的UserControl中,我想從模型中獲取結果並綁定到List:

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開始,不知道如何正確綁定數據。

可能您應該按以下方式更改方法,以便該方法將返回實際結果,

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

並像這樣在XAML中分配ListView的ItemsSouce:

        <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和綁定的更多信息。 快樂編碼!

我要添加此響應以整合上一個響應中的內容:

首先更改方法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;
    }

第二件事要做的是更改代碼,就像告訴您Naresh Ravlani那樣:

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

第三要注意的是,您還告訴您列表中的等效項包括itemsource:

        <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使用DataBinding( ItemSource =“ {Binding}” )從Datacontext中獲取其itemsource。

希望對您有幫助!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM