[英]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.