我现在用的是世界粮食计划署与MVVM设计,我的第一个项目,我有更新视图中的问题,我从客户端处理命令后更新实体更新从视图模型在WPF的看法。此时,视图可以与视图模型对话,但视图模型无法回复查看。 任何人有任何想法如何使这个作品? 谢谢, Jdang如何使用MVVM设计
回答
您应该使ViewModel实现INotifyPropertyChanged并在ViewModel属性更改时触发PropertyChanged事件。假设UI绑定到ViewModel属性,这应该工作。
在一个典型的MVVM应用程序,您使用绑定连接视图到视图模型。当视图模型引发PropertyChanged
事件,由INotifyPropertyChanged
接口定义的绑定被自动更新。因此,您需要在ViewModel中实现该界面,并在属性值更改时引发PropertyChanged
事件,并且视图将自动反映更改。
是的,我执行INotifyPropertyChanged,并触发PropertyChanged事件,但是,鉴于没有什么变化。我需要做什么特别的事情吗?目前,这里是我 – AustinTX 2011-05-09 14:11:52
是的,我执行INotifyPropertyChanged,并触发PropertyChanged事件,但是,鉴于没有什么变化。我需要做什么特别的事情吗?目前这里是我的xaml Text =“{Binding User。UserName,Mode = TwoWay,UpdateSourceTrigger = PropertyChanged}“。你有什么样的例子让我去看看吗? – AustinTX 2011-05-09 14:17:15
它应该与你拥有的一起工作......你能编辑你的问题以包含更多的代码吗? – 2011-05-09 14:28:26
如果你是新来的MVVM模式,我建议从MSDN覆盖两个模式,如何实现它在WPF和Silverlight应用程序下面的优秀资源:
根据你所说的,这听起来像你可能想要查看data binding,以及如何利用的INotifyPropertyChanged,INotifyCollectionChanged,一d ICollectionView接口,以实现视图和视图模型之间的双向通信。
Silverlight和WPF数据绑定支持多个数据结合模式。通过单向数据绑定,可以将UI控件绑定到视图模型,以便在呈现显示时反映底层数据的值。当用户在用户界面中修改底层数据时,双向数据绑定也会自动更新底层数据。为了确保UI在数据在视图模型中发生变化时保持最新,它应该实现适当的变更通知界面。
是的,我执行INotifyPropertyChanged并触发PropertyChanged事件,但没有任何更改视图。我必须做任何特殊的视图。目前这里是我有Text =“{Binding User.UserName,Mode = TwoWay,UpdateSourceTrigger = PropertyChanged}” – AustinTX 2011-05-09 14:14:45
您的绑定看起来是正确的你有没有证实PropertyChanged是通过设置断点来改变UserName属性的时候产生的呢?另外,请仔细检查你所引发的属性的文本名称是否与你的属性名完全匹配。并查看模型,如果你想,这将有助于调试您的问题。 – Oppositional 2011-05-09 15:19:58
另外对其他答案,我也建议有您的ViewModels延伸DependencyObject。有些人认为DependencyObjects是沉重的权重(如果你创建了成千上万个实例,它们可以是),对新用户来说有点复杂(绝对有些情况是这样的)。但是,对于DependencyObjects还有其他优点,例如自动支持属性更改通知和绑定评估速度。
这里是我的DP片段(保存为DependencyProperty.snippet在C:\用户[YOUR NAME HERE] \文档\ Visual Studio的[2010,2008] \代码段\的Visual C#\我的代码段):
<?xml version="1.0" encoding="utf-8"?>
<CodeSnippets xmlns="http://schemas.microsoft.com/VisualStudio/2005/CodeSnippet">
<CodeSnippet Format="1.0.0">
<Header>
<SnippetTypes>
<SnippetType>Expansion</SnippetType>
</SnippetTypes>
<Title>SnippetFile1</Title>
<Author>will</Author>
<Description>
</Description>
<HelpUrl>
</HelpUrl>
<Shortcut>dp</Shortcut>
</Header>
<Snippet>
<Declarations>
<Literal Editable="true">
<ID>PropertyName</ID>
<ToolTip>Property name</ToolTip>
<Default>PropertyName</Default>
<Function>
</Function>
</Literal>
<Literal Editable="false">
<ID>ClassName</ID>
<ToolTip>Class name</ToolTip>
<Default>ClassName</Default>
<Function>ClassName()</Function>
</Literal>
<Literal Editable="true">
<ID>Type</ID>
<ToolTip>Property type</ToolTip>
<Default>object</Default>
<Function>
</Function>
</Literal>
<Literal Editable="true">
<ID>DefaultValue</ID>
<ToolTip>Default value</ToolTip>
<Default>null</Default>
<Function>
</Function>
</Literal>
</Declarations>
<Code Language="csharp"><![CDATA[#region $PropertyName$
/// <summary>
/// The <see cref="DependencyProperty"/> for <see cref="$PropertyName$"/>.
/// </summary>
public static readonly DependencyProperty $PropertyName$Property =
DependencyProperty.Register(
$PropertyName$Name,
typeof($Type$),
typeof($ClassName$),
new UIPropertyMetadata($DefaultValue$));
/// <summary>
/// The name of the <see cref="$PropertyName$"/> <see cref="DependencyProperty"/>.
/// </summary>
public const string $PropertyName$Name = "$PropertyName$";
/// <summary>
/// $end$
/// </summary>
public $Type$ $PropertyName$
{
get { return ($Type$)GetValue($PropertyName$Property); }
set { SetValue($PropertyName$Property, value); }
}
#endregion ]]></Code>
</Snippet>
</CodeSnippet>
</CodeSnippets>
我同意你使用DependencyObject,一些性能优势,b ut它们绑定到它们创建的线程,并且依赖项对象不可序列化。在某些情况下,他们肯定是要走的路,但总的来说,使用带有通知接口的POCO更安全(并且相对表现更好)。 – Oppositional 2011-05-09 15:16:32
对于那些有兴趣的人来说,http://msdn.microsoft.com/en-us/library/bb613546.aspx#HowDataBindingReferencesAreResolved提供了关于威尔正在谈论的性能影响的体面信息。 – Oppositional 2011-05-09 15:22:41
- 1. WPF,MVVM,MasterDetailPage,设计
- 2. MVVM设计问题
- 3. MVVM模型设计
- 4. 如何使用MVVM
- 5. 如何使用MVVM
- 6. MVVM服务方法设计
- 7. MVVM设计考虑事项
- 8. WPF MVVM设计问题
- 9. MVVM设计模式问题
- 10. 实时应用程序的MVVM设计
- 11. 如何使用android设计?
- 12. 如何使用设计库
- 13. 如何使用设计
- 14. 应用程序设计 - 使用MVVM弹出验证
- 15. 如何使用Silverlight和MVVM设计复合视图和视图模型?
- 16. 如何强制使用MVVM
- 17. 如何使用TreeViewDragDropTarget MVVM
- 18. 如何使用MVVM从DataGrid中获取SelectedItems使用MVVM
- 19. 在.Net 3.0中使用MVVM设计模式
- 20. 在MVVM模式中使用WPF设计数据
- 21. 如何用新设计覆盖旧设计(使用母版页)?
- 22. WPF MVVM XAML设计 - VS 2010 XAML设计师 - 设计时间数据
- 23. 在MVVM MVVM设计模式中的缺点android
- 24. 有关MVVM的最佳设计咨询
- 25. 查询WPF上的MVVM设计模式
- 26. MVVM带EF,DataAccess设计问题
- 27. MVVM良好的设计。 DataSet或RowViewModel
- 28. MVVM WPF保存和加载用户设置设计模式
- 29. 如何使用设计登录用户?
- 30. 如何使用MVVM Light设置WP7中的StackPanel的可见性?
很抱歉,请问您解决了这个问题吗?我陷入同样的.. – curiousity 2015-06-30 15:31:04