2009-10-20 72 views
0

这可能很明显,但我找不到最好的方法。WPF:绑定非静态参数? (新手问题)

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

用户登录到应用程序。

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

我想用一个ObjectDataProvider,但我无法弄清楚如何结合使用非静态的东西(如我的_dbService,userId,语言...)。

是唯一的选择,使所有这些东西静态与绑定在代码背后?

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

回答

2

我做我所有的WPF使用Model-View-ViewModel模式。我给了你一个链接,但Google会给你装载。 MVVM似乎是WPF的标准模式。 This project可能比您需要的更复杂,但它写得很好,并将MVVM的使用带回家。

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

然后你有你的ViewModel - 你有模型的每个实例的ViewModel的一个实例:VM有一个引用M和'转发'属性。 ViewModel就是你用来操纵模型的东西。

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

所以,当你点击你的视图中的一个按钮时,绑定会将它传递到你的ViewModel中的一个操作Model的Command中。

用户界面也是一个视图与ViewModel。因此,您的UI VM可能会从数据库加载模型集合,并将它们粘贴到ObservableCollection中。 ListBox项目集合将绑定到此ObservableCollection。

在这样的帖子中很难解释所有这些。阅读几篇文章,看看你的想法。在这方面我仍然很新,但是我相信我对MVVM的看法已经有所收获。

+0

thx,可能会切换到这个 – 2009-10-20 13:36:48

0

宫颈癌托马斯,汤姆在这里从轨道中的一个:)

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

该视图绑定到视图模型,所以它有一个对它的引用(2种方式,超强大,超出典型的MS演示)。视图模型仅仅是一个poco,是视图,数据+行为的表示。一旦你挖掘这个段落,酷酷的术语mvvm将没有任何秘密。

我看看我能不能拿出一个小演示。也许我以后会有时间的。 我会想到的是一个视图(xaml,文件1),它绑定到一个视图模型(文件2,一个poco类,不会被代码弄错)。该模型可以是任何你喜欢的(服务层或直接到存储库)。使用2路绑定的强大功能,我们将绑定到一个可观察的集合,这意味着如果我们添加/删除/ ...集合的东西,视图将捡起它,而我们没有把精力投入它。

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

我看到的问题是从十月..你有没有找到一个好的解决方案?