相关疑难解决方法(0)

抛出XamlParseException调用XamlReader.Load

我正在玩.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 …

wpf xaml .net-4.0

3
推荐指数
2
解决办法
6893
查看次数

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

这是一个从最初发布的问题扩展到的问题: 链接到loading-xaml到运行时

我正在开发一个WPF MVVM应用程序,它从外部源动态加载XAML内容,与上面的帖子中的答案非常相似.
这是我到目前为止所得到的:

  1. My View将ViewModel的实例声明为资源,并创建该ViewModel的实例
  2. 在我的ViewModel构造函数中,我正在加载来自外部源(文件或数据库..)的XamlString属性.
  3. 在我看来,我有一个用户在ViewModel完成加载后点击的按钮,在点击事件代码隐藏中,我将动态加载的XAML反序列化并将其添加到我的网格中.

我的问题是,如何消除代码隐藏和自动化逻辑,以便View可以在ViewModel完成获取XAML内容并初始化字符串属性后立即动态呈现新的xaml部分?

我应该使用某种消息总线,以便ViewModel在设置属性后通知,以便View可以添加新内容吗?

让我感到困扰的是,ViewModel确实有对Views的引用,不应该负责生成UI元素.

提前致谢!

编辑:只是为了澄清:在我的特定情况下,我不是试图将业务对象或集合(模型)绑定到UI元素(例如网格),这显然可以通过模板和绑定来完成.我的ViewModel正在从外部源检索整个XAML表单,并将其设置为View可用的字符串属性.

我的问题是:谁应该负责将这个XAML字符串属性反序列化为UI元素,并在设置VM中的Xaml字符串属性后以编程方式将其添加到我的网格中?
这听起来更像是一个View责任,而不是ViewModel.但我理解的模式强制要用V-VM绑定替换任何代码隐藏逻辑.

.net c# wpf dynamic mvvm

3
推荐指数
1
解决办法
7719
查看次数

标签 统计

wpf ×2

.net ×1

.net-4.0 ×1

c# ×1

dynamic ×1

mvvm ×1

xaml ×1