WPF:与非静态参数绑定? (新手问题)

时间:2009-10-20 09:27:57

标签: wpf data-binding binding non-static objectdataprovider

这可能很明显,但我找不到最好的方法。

我想在列表框中显示用户的待办事项。这些ToDo位于数据库中,由Id,UserId和Description组成。

用户登录该应用。

如何检索该特定userId的ToDo并将其设置为绑定到列表框?

我正在尝试使用ObjectDataProvider,但我无法弄清楚如何将其与非静态内容(例如我的_dbService,userId,language,...)结合使用。

唯一的选择是使所有这些东西在后面的代码中是静态的还是绑定的?

如果是这样,这意味着ObjectDataProvider不是很有用,不是吗? 我发现它有许多与硬编码参数一起使用的例子,但我几乎看不到任何我需要这种功能的情况..

2 个答案:

答案 0 :(得分:2)

我使用Model-View-ViewModel模式完成所有WPF。我已经给你一个链接,但谷歌会给你负载。 MVVM似乎是WPF的标准模式。 This project可能比你需要的更复杂,但编写得很好,并且可以使用MVVM。

基本上,您可以创建数据模型。在这种情况下,您可能会创建一个具有属性Id,UserID和Description的简单类(我称之为ToDoItem)。使用首选机制从数据库中获取这些集合。链接到SQL,实体框架,标准查询,等等。

然后您拥有ViewModel - 您为模型的每个实例都有一个ViewModel实例:VM引用了M和“转发”属性。 ViewModel是您用来操作模型的。

然后你有你的视图 - 这是用户界面。您将View的DataContext设置为ViewModel,然后您的绑定自动绑定到ViewModel。您的视图最终成为您可以看到的内容。所有工作都在ViewModel中完成。这意味着它很容易测试。

因此,当您单击视图中的按钮时,绑定会将其传递给ViewModel中用于操作模型的Command。

UI也是带有ViewModel的视图。因此,您的UI VM可能会从数据库中加载一组模型,并将它们粘贴在ObservableCollection中。 ListBox项集合将绑定到此ObservableCollection。

很难在这样的帖子中解释所有这些。阅读几篇文章,看看你的想法。我对此仍然很陌生,但我相信我对MVVM的阅读已经得到了回报。

答案 1 :(得分:0)

Hela Thomas,汤姆来自Orbit One:)

MVVM是要走的路。我正在进行第四个项目,如果你使用mvvm,WPF真的很棒。你已经尝试过MVC(或者我们在recy *轮胎上做的MVP),这是一个很好的分离关注点。 MVVM更进了一步,因为viewmodel对视图一无所知。

视图绑定到viewmodel,因此它有一个对它的引用(2路,超级强大,超出了典型的MS演示)。 viewmodel只是一个poco,是您的视图,数据+行为的表示。一旦你挖掘了这一段,很酷的术语mvvm就没有秘密了。

我看是否可以拿出一个小型演示。也许我以后会有时间。 我将提出的是一个视图(xaml,文件1),它绑定到一个视图模型(文件2,一个poco类,不要被后面的代码弄错)。模型可以是您喜欢的任何类型(服务层或直接到存储库)。使用双向绑定的强大功能,我们将绑定到一个可观察的集合,这意味着如果我们在集合中添加/删除/ ...某些内容,视图将在不给我们注入能量的情况下进行拾取。

我的前2个wpf项目是用Caliburn Micro完成的(参见codeplex),这是一个基于约定的强大框架。它使你远离硬核wpf(主要是自己创建游览依赖属性),你可以在不完全理解wpf的情况下相对快速地创建一些东西。这本身就是一个缺点,但它对我有用。从项目3开始,我开始自己驯服这些依赖项属性,这将使你成为一个更好的wpf开发人员。

我看到问题是从十月开始......你找到了一个好的解决方案吗?