Tag: dynamic

使用WPF中的MVVM模式在运行时加载XAML

这是一个从最初发布的问题扩展到的问题: 链接到loading-xaml到运行时 我正在开发一个WPF MVVM应用程序,它从外部源动态加载XAML内容,与上面的post中的答案非常相似。 这是我到目前为止所得到的: My View将ViewModel的实例声明为资源,并创建该ViewModel的实例 在我的ViewModel构造函数中,我正在加载来自外部源(文件或数据库…)的XamlString属性。 在我看来,我有一个用户在ViewModel完成加载后点击的按钮,在点击事件代码隐藏中,我将动态加载的XAML反序列化并将其添加到我的网格中。 我的问题是,如何消除代码隐藏并自动化逻辑,以便View可以在ViewModel完成获取XAML内容并初始化字符串属性后立即动态呈现新的xaml部分? 我应该使用某种消息传递总线,以便ViewModel在设置属性后通知,以便View可以添加新内容吗? 让我感到困扰的是,ViewModel确实有对Views的引用,不应该负责生成UI元素。 提前致谢! 编辑 :只是为了澄清:在我的特定情况下,我不是试图将业务对象或集合(模型)绑定到UI元素(例如网格),这显然可以通过模板和绑定来完成。 我的ViewModel正在从外部源检索整个XAML表单,并将其设置为View可用的字符串属性。 我的问题是:一旦我设置了VM中的Xaml字符串属性,谁应该负责将此XAML字符串属性反序列化为UI元素并以编程方式将其添加到我的网格中? 这听起来更像是一个View责任,而不是ViewModel。 但我理解的模式强制要用V-VM绑定替换任何代码隐藏逻辑。

使用C#匿名类型

我正在调用一个返回包含ac#Anonymous Type对象的List变量的方法。 例如: List list = new List(); foreach ( Contact c in allContacts ) { list.Add( new { ContactID = c.ContactID, FullName = c.FullName }); } return list; 我如何在我正在处理的代码中引用此类型属性,例如 foreach ( object o in list ) { Console.WriteLine( o.ContactID ); } 我知道我的样本是不可能的,我只是这样说,我需要确切地识别匿名类型的每个属性。 谢谢! 方案 : 不只是其中一个答案是正确的和/或建议一个有效的解决方案。 我最终使用了Greg选项3的答案。 我在.NET 4.0中学到了一些非常有趣的东西!

在后面的代码中创建DataTemplate

如何以编程方式向datatemplates添加控件? 例如。 下面我创建了TextBlock和DataTemplate。 TextBlock text = new TextBlock(); DataTemplate template = new DataTemplate(); 现在我需要将TextBlock添加到DataTemplate。 怎么做到这一点? 我知道在代码中有addind数据模板的其他方法1.在XAML中创建数据模板并将其加载到后面的代码上2.使用XamlParser创建和添加 但我需要按照我在例子中展示的方式做。 需要一些帮助。