我正在玩.net 4 System.Windows.Markup.XamlReader- 就像教育练习一样 - 我一直在遇到同样的问题:如果根对象定义了一个,那么加载xaml XamlReader.Load会抛出a ,但如果没有,则成功解析并加载节点.XamlParseExceptionx:Class
这是我正在尝试的代码:
using System.Windows;
using System.Xaml;
using XamlReader = System.Windows.Markup.XamlReader;
namespace WpfApplication2
{
/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
// Load up UserControl1.xaml from the solution
var reader = new XamlXmlReader(@"../../UserControl1.xaml", XamlReader.GetWpfSchemaContext());
var userControl = XamlReader.Load(reader) as UserControl1;
// Do something with userControl...
}
}
}
Run Code Online (Sandbox Code Playgroud)
我已经尝试XamlReader.Parse直接从持有xaml的字符串中得到相同的结果:只有在没有定义x:Class声明的情况下才有效.
删除x:Class声明似乎不是一个好的选择,因为然后我失去了代码隐藏,特别是调用InitalizeComponent()
例外细节:
'Specified …
这是一个从最初发布的问题扩展到的问题: 链接到loading-xaml到运行时
我正在开发一个WPF MVVM应用程序,它从外部源动态加载XAML内容,与上面的帖子中的答案非常相似.
这是我到目前为止所得到的:
我的问题是,如何消除代码隐藏和自动化逻辑,以便View可以在ViewModel完成获取XAML内容并初始化字符串属性后立即动态呈现新的xaml部分?
我应该使用某种消息总线,以便ViewModel在设置属性后通知,以便View可以添加新内容吗?
让我感到困扰的是,ViewModel确实有对Views的引用,不应该负责生成UI元素.
提前致谢!
编辑:只是为了澄清:在我的特定情况下,我不是试图将业务对象或集合(模型)绑定到UI元素(例如网格),这显然可以通过模板和绑定来完成.我的ViewModel正在从外部源检索整个XAML表单,并将其设置为View可用的字符串属性.
我的问题是:谁应该负责将这个XAML字符串属性反序列化为UI元素,并在设置VM中的Xaml字符串属性后以编程方式将其添加到我的网格中?
这听起来更像是一个View责任,而不是ViewModel.但我理解的模式强制要用V-VM绑定替换任何代码隐藏逻辑.