使用 MVVM(WPF、ListView、绑定)的 ListView DataBindig
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 的用户控件,我想从模型中获取结果并绑定到列表:
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,不知道如何正确绑定数据。
可能您应该按如下方式更改方法,以便该方法将 return 实际结果,
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 和绑定的更多信息。编码愉快!!
我添加此回复是为了整合之前回复中提到的内容:
首先按照 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;
}
第二件事是按照 Naresh Ravlani 告诉您的那样更改代码:
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}" >
<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}" >
请注意,您必须告诉列表视图使用 DataBinding 从 Datacontext 获取其项目源(ItemSource = "{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 的用户控件,我想从模型中获取结果并绑定到列表:
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,不知道如何正确绑定数据。
可能您应该按如下方式更改方法,以便该方法将 return 实际结果,
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 和绑定的更多信息。编码愉快!!
我添加此回复是为了整合之前回复中提到的内容:
首先按照 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;
}
第二件事是按照 Naresh Ravlani 告诉您的那样更改代码:
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}" >
<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}" >
请注意,您必须告诉列表视图使用 DataBinding 从 Datacontext 获取其项目源(ItemSource = "{Binding}")。
希望对您有所帮助!