WPF Xaml绑定到一个类,该类从外部dll(具有多个版本)实现接口。

问题描述 投票:0回答:1

我正在Visual Studio中使用应用程序插件。我已经创建了WPF窗口,并且需要将其DataContext设置为已建立的类。此类实现了原始应用程序(我在项目中引用的.dll)的接口。

我正在构建主应用程序的几个不同版本,并且每个版本都有自己的API .dll。由于存在不同的.dll版本,因此我将通过正在使用的构建配置(在.csproj中定义)动态加载正确的版本。

这是我的Xaml中的窗口定义:

     <Window x:Class="MyNamespace.MyClass.MonitorWindow"
         xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
         xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
         xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
         xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
         xmlns:local="clr-namespace:MyNamespace.MyClass"
         mc:Ignorable="d" Title="MyClass Monitor" >

<Window.DataContext>
    <local:MonitorCommand></local:MonitorCommand>
</Window.DataContext>

这是我在.csproj中通过配置加载.dll的位置

  <Reference Include="RevitAPI" Condition="'$(Configuration)' == 'Revit2018'">
  <HintPath>C:\Program Files\Autodesk\Revit 2018\RevitAPI.dll</HintPath>
  <Private>False</Private>
</Reference>
<Reference Include="RevitAPI" Condition="'$(Configuration)' == 'Revit2020'">
  <HintPath>C:\Program Files\Autodesk\Revit 2020\RevitAPI.dll</HintPath>
  <Private>False</Private>
</Reference>

设计器不起作用,这是我收到的错误消息之一:

    Error   XDG0008 The name "MonitorCommand" does not exist in the namespace "clr-namespace:MyNamespace.MyClass".  MyNamespace MonitorWindow.xaml  10  

Intellisense会自动完成DataContext中的“ MonitorCommand”类,但是,它将其标记为错误。

我认为错误可能是由于Xaml无法识别外部.dll所致,因为当我从MonitorCommand中删除接口实现时,错误消失了。

我的目标是将.Xaml正确链接到我的类,并能够在窗口中访问其属性。

请让我知道您是否遇到过这样的事情!在此先感谢

c# wpf xaml dll revit
1个回答
0
投票

xmlns应该指向名称空间,而不是类。

您的定义应类似于:xmlns:local =“ clr-namespace:MyNamespace”。

然后在您的类中,添加一个指向命令(属于您的命令类型)的属性。

然后,窗口的DataContext应该是您的类的实例。

在窗口的内容(您的视图)中添加一个按钮,并使其具有Command属性

绑定到包含命令的属性。

© www.soinside.com 2019 - 2024. All rights reserved.