【问题标题】:List<> Binding and button click using mvvm lightList<> 使用 mvvm light 绑定和单击按钮
【发布时间】:2011-03-10 10:56:57
【问题描述】:

我正在尝试使用 MVVM light 来实现这样的目标。我有以下情况:

在我的模型中——我设置了 ActivityName、Image 等属性,并且有一个类构造函数接受名称和图像等 2 个参数。

我是我的 DataAccess——我已经设置了数据库连接并实现了所需的方法,该方法将从数据库中获取数据,我将其存储在列表中并将列表返回给 ViewModel。

在我的 ViewModel 中——我创建了列表属性,该属性将通过调用我在 DataAccess 中定义的 GetActivities() 方法返回列表。

现在我的问题是我不知道如何在视图中绑定它,以便通过单击按钮显示带有图像的活动列表。通过单击某个按钮,应打开一个具有所需结果的新窗口。如何绑定以上列表并使用MVVM light实现按钮功能。

请帮忙?

谢谢

【问题讨论】:

  • 视图中有哪些控件?
  • 我有数据网格来显示图像及其相应的活动

标签: wpf data-binding mvvm mvvm-light


【解决方案1】:
  • 首先,使用 ObservableCollection 而不是 List,因为它会在属性或集合发生更改时通知视图。
  • 然后将视图的 DataContext 设置为视图模型。如果你使用 MVVMLight 视图类,那么 DataContext 将被自动设置。您只需在此处提供 ViewModel 名称。
  • 然后像这样设置DataGrid的ItemsSource &lt;dg:DataGrid ItemsSource="{Binding YourListInViewModel}"/&gt;
  • 为了处理点击事件,您可以使用 Event-To-Command 行为并将您的逻辑写入 Button 的相应命令处理程序中。

【讨论】:

  • 您的意思是说我必须在存储时在数据访问中使用 ObservableCollection,在返回时在视图模型中使用?请推荐?
  • 你需要在VM中创建一个ObservableCollection。如果 GetActivities() 返回一个列表,然后像 ObservableCollection a = new ObservableCollection(GetActivities()); 那样从中创建一个 OC。但我建议您创建一个方法GetActivities(),它会返回一个IEnumerable,因为它可以避免复制两次:一次从数据库复制到列表,然后复制到OC。
  • 谢谢。我会试试看,让你知道
【解决方案2】:

绑定到控件的DataContext

【讨论】:

    猜你喜欢
    • 2011-02-23
    • 1970-01-01
    • 1970-01-01
    • 2015-08-06
    • 2016-04-04
    • 1970-01-01
    • 2019-04-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多