WPF, .UIBindings & Acmgd

Автор Тема: WPF, .UIBindings & Acmgd  (Прочитано 10618 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Тема содержит сообщение с Решением. Нажмите здесь чтобы посмотреть его.

Оффлайн GermanАвтор темы

  • ADN Club
  • **
  • Сообщений: 84
  • Карма: 13
WPF, .UIBindings & Acmgd
« : 17-06-2014, 11:27:49 »
Fenton Webb в "Using Windows Presentation Foundation in AutoCAD Part 2" показывает на примере решения "3 - DataBindingToAcadClrUIBindings.sln", как осуществляется Binding.Mode=TwoWay.
Однако, я попробовал этот пример в AutoCAD 2014 Rus, и не работает. Проблемы две.
Сначала код:
Код - C# [Выбрать]
  1. // Commands.cs
  2.  
  3. using Rt = Autodesk.AutoCAD.Runtime;
  4.  
  5. namespace ClassLibrary1
  6. {
  7.     public class Commands
  8.     {
  9.         #region WPF
  10.         [Rt.CommandMethod("modalUIBindings")]
  11.         public static void Modal()
  12.         {
  13.             // create a new window
  14.             MyModalWindow dlg = new MyModalWindow();
  15.             Autodesk.AutoCAD.ApplicationServices.Application.ShowModalWindow(dlg);
  16.         }
  17.  
  18.         [Rt.CommandMethod("modelessUIBindings")]
  19.         public static void Modeless()
  20.         {
  21.             // create a new instance
  22.             MyModelessWindow dlg = new MyModelessWindow();
  23.             // and show it
  24.             Autodesk.AutoCAD.ApplicationServices.Application.ShowModelessWindow(dlg);
  25.         }
  26.         #endregion
  27.     }
  28. }
  29.  
  30. // MyLayerControl.xaml.cs
  31.  
  32. using System.Windows.Controls;
  33.  
  34. namespace ClassLibrary1
  35. {
  36.   /// <summary>
  37.   /// Interaction logic for UserControl1.xaml
  38.   /// </summary>
  39.   public partial class MyLayerControl : UserControl
  40.   {
  41.     public MyLayerControl()
  42.     {
  43.       InitializeComponent();
  44.     }
  45.   }
  46. }
  47.  
  48. // MyModalWindow.xaml.cs
  49.  
  50. using System.Windows;
  51.  
  52. namespace ClassLibrary1
  53. {
  54.   /// <summary>
  55.   /// Interaction logic for Window1.xaml
  56.   /// </summary>
  57.   public partial class MyModalWindow : Window
  58.   {
  59.     public MyModalWindow()
  60.     {
  61.       InitializeComponent();
  62.     }
  63.   }
  64. }
  65.  
  66. // MyModelessWindow.xaml.cs
  67.  
  68. using System.Windows;
  69.  
  70. namespace ClassLibrary1
  71. {
  72.   /// <summary>
  73.   /// Interaction logic for MyModelessWindow.xaml
  74.   /// </summary>
  75.   public partial class MyModelessWindow : Window
  76.   {
  77.     public MyModelessWindow()
  78.     {
  79.       InitializeComponent();
  80.     }
  81.   }
  82. }

Код - XML [Выбрать]
  1. <!--MyLayerControl.xaml-->
  2.     <UserControl x:Class="ClassLibrary1.MyLayerControl"
  3.    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  4.    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
  5.    xmlns:acmgd="clr-namespace:Autodesk.AutoCAD.ApplicationServices;assembly=Acmgd"
  6.    MinHeight="100" MinWidth="100">
  7.   <Grid>
  8.         <ListView
  9.            ItemsSource="{Binding Source={x:Static acmgd:Application.UIBindings}, Path=Collections.Layers, Mode=TwoWay}"
  10.            Background="PaleGoldenrod">
  11.       <ListView.View>
  12.         <GridView>
  13.           <GridViewColumn Header="Name" Width="100">
  14.             <GridViewColumn.CellTemplate>
  15.               <DataTemplate>
  16.                 <TextBox Text="{Binding Path=Name}" Background="PaleGoldenrod" />
  17.               </DataTemplate>
  18.             </GridViewColumn.CellTemplate>
  19.           </GridViewColumn>
  20.           <GridViewColumn Header="IsOff" Width="35">
  21.             <GridViewColumn.CellTemplate>
  22.               <DataTemplate>
  23.                 <CheckBox  IsChecked="{Binding Path=IsOff}"  Background="PaleGoldenrod" />
  24.               </DataTemplate>
  25.             </GridViewColumn.CellTemplate>
  26.           </GridViewColumn>
  27.           <GridViewColumn Header="IsLocked" Width="55" >
  28.             <GridViewColumn.CellTemplate>
  29.               <DataTemplate>
  30.                 <CheckBox  IsChecked="{Binding Path=IsLocked}"  Background="PaleGoldenrod" />
  31.               </DataTemplate>
  32.             </GridViewColumn.CellTemplate>
  33.           </GridViewColumn>
  34.         </GridView>
  35.       </ListView.View>
  36.     </ListView>
  37.   </Grid>
  38. </UserControl>
  39.  
  40. <!--MyModalWindow.xaml-->
  41.     <Window x:Class="ClassLibrary1.MyModalWindow"
  42.    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  43.    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
  44.    xmlns:src="clr-namespace:ClassLibrary1"
  45.    Title="Modal Window" Height="273" Width="281">
  46.     <Grid>
  47.         <Grid.RowDefinitions>
  48.             <RowDefinition Height="218*" />
  49.             <RowDefinition Height="44*" />
  50.         </Grid.RowDefinitions>
  51.         <Grid.ColumnDefinitions>
  52.             <ColumnDefinition Width="171*" />
  53.             <ColumnDefinition Width="51*" />
  54.             <ColumnDefinition Width="56*" />
  55.         </Grid.ColumnDefinitions>
  56.         <src:MyLayerControl Grid.ColumnSpan="3"/>
  57.     </Grid>
  58. </Window>
  59.  
  60. <!--MyModelessWindow.xaml-->
  61. <Window x:Class="ClassLibrary1.MyModalWindow"
  62.    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  63.    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
  64.    xmlns:src="clr-namespace:ClassLibrary1"
  65.    Title="Modal Window" Height="273" Width="281">
  66.     <Grid>
  67.         <Grid.RowDefinitions>
  68.             <RowDefinition Height="218*" />
  69.             <RowDefinition Height="44*" />
  70.         </Grid.RowDefinitions>
  71.         <Grid.ColumnDefinitions>
  72.             <ColumnDefinition Width="171*" />
  73.             <ColumnDefinition Width="51*" />
  74.             <ColumnDefinition Width="56*" />
  75.         </Grid.ColumnDefinitions>
  76.         <src:MyLayerControl Grid.ColumnSpan="3"/>
  77.     </Grid>
  78. </Window>
  79. <Window x:Class="ClassLibrary1.MyModelessWindow"
  80.    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  81.    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
  82.    xmlns:src="clr-namespace:ClassLibrary1"
  83.    Title="Window1" Height="300" Width="300">
  84.     <Grid>
  85.         <src:MyLayerControl Grid.ColumnSpan="3"/>
  86.     </Grid>
  87. </Window>

Подключенные системные библиотеки: System, System.Xaml, WindowsBase, PresentationCore, PresentationFramework.
Подключенные библиотеки AutoCAD: accoremgd, acbmgd и внимание!!! тут первый "затык", а какую acmgd подключить?!

Вариант №1: из ObjectARX2014, то MyLayerControl конструируется в дизайнере, но следующая ошибка: "Среда выполнения Common Language Runtime обнаружила недопустимую программу".
Вариант №2: из C:\Program Files, то MyLayerControl не конструируется в дизайнере и следующая ошибка: "Имя "Application" не существует в пространстве имен "clr-namespace:Autodesk.AutoCAD.ApplicationServices;assembly=Acmgd".

Идем далее, т.е. запускаем в отладчике любой вариант, вводим команду "modelessUIBindings" и получаем System.Windows.Markup.XamlParseException произошло
HResult=-2146233087
Message=Привязка типа TwoWay или OneWayToSource не может работать с доступным только для чтения свойством "Name" типа "Autodesk.AutoCAD.Windows.Data.NewDataItem"... в ClassLibrary1.Commands.Modeless()

Удаление Mode=TwoWay в строке 9 ни к чему не приводит.

Подскажите, пожалуйста, что я упустил.

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: WPF, .UIBindings & Acmgd
« Ответ #1 : 17-06-2014, 11:35:25 »
1. Если ссылаешься на пример, то давай на него ссылку. Не следует думать, что все знают как этот пример найти и будут тратить для этого свое время.
2.
Подключенные библиотеки AutoCAD: accoremgd, acbmgd и внимание!!! тут первый "затык", а какую acmgd подключить?!
acbmgd - видимо опечатка. должно быть acdbmgd
acmgd - можно ту, которая в составе AutoCAD, можно ту, которая в составе ObjectARX SDK 2014.
В любом случае для них всех должно быть установлено свойство CopyLocal = False
« Последнее редактирование: 28-11-2014, 20:39:27 от Александр Ривилис »
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн GermanАвтор темы

  • ADN Club
  • **
  • Сообщений: 84
  • Карма: 13
Re: WPF, .UIBindings & Acmgd
« Ответ #2 : 17-06-2014, 12:40:25 »
1. Если ссылаешься на пример, то давай на него ссылку. Не следует думать, что все знают как этот пример найти и будут тратить для этого свой время.
Здесь ссылки вроде http://adndevblog.typepad.com/autocad/fenton-webb/page/18/.
acbmgd - видимо опечатка. должно быть acdbmgd
acmgd - можно ту, которая в составе AutoCAD, можно ту, которая в составе ObjectARX SDK 2014.
В любом случае для них всех должно быть установлено свойство CopyLocal = False
Опечатка, конечно, и для всех, конечно, установлено CopyLocal = False.

Еще сразу добавлю и nextfiberworld = 0 (1) не влияет.

Отмечено как Решение Александр Ривилис 22-01-2017, 22:59:55

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: WPF, .UIBindings & Acmgd
« Ответ #3 : 17-06-2014, 12:46:36 »
Замени строку:
Код - XML [Выбрать]
  1. <TextBox Text="{Binding Path=Name}" Background="PaleGoldenrod" />
на строку
Код - XML [Выбрать]
  1. <TextBox Text="{Binding Path=Name, Mode=OneWay}" Background="PaleGoldenrod" />
И ссылки на сборки из каталога с AutoCAD.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн GermanАвтор темы

  • ADN Club
  • **
  • Сообщений: 84
  • Карма: 13
Re: WPF, .UIBindings & Acmgd
« Ответ #4 : 17-06-2014, 13:19:04 »
Шикарно работает, Александр! Спасибо!

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: WPF, .UIBindings & Acmgd
« Ответ #5 : 17-06-2014, 13:26:51 »
Шикарно работает, Александр! Спасибо!
Я проверял в AutoCAD 2013 и слово "шикарно" в данном случае не совсем удачно. Я детально не разбирался, но похоже тут должна быть двустороння связь, которая в предыдущих версиях AutoCAD была. Так вот включение/выключение слоёв у меня в диалоге не отображается. Хотя если диалог перезапустить, то видно что параметры изменились. Если повторять команду, то в командной строке видно, что запускалась команда _-LAYER и она вклинивается в список команд. Возможности проверить как это работает в AutoCAD 2014 и 2015 сейчас нет.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: WPF, .UIBindings & Acmgd
« Ответ #6 : 17-06-2014, 14:06:42 »
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн GermanАвтор темы

  • ADN Club
  • **
  • Сообщений: 84
  • Карма: 13
Re: WPF, .UIBindings & Acmgd
« Ответ #7 : 17-06-2014, 14:08:18 »
Civil 2014 Rus. Работает как предполагается. В обе стороны.

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: WPF, .UIBindings & Acmgd
« Ответ #8 : 17-06-2014, 14:08:59 »
Civil 2014 Rus. Работает как предполагается. В обе стороны.
Но имя слоя не редактируется?
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн GermanАвтор темы

  • ADN Club
  • **
  • Сообщений: 84
  • Карма: 13
Re: WPF, .UIBindings & Acmgd
« Ответ #9 : 17-06-2014, 14:23:56 »
Но имя слоя не редактируется?
Честно, и не думал, что оно должно редактироваться, так как мне достаточно отображения. А редактирование даже совсем лишнее.
Но, если изначально задумывалось, что редактируется все, тогда, конечно, не есть шикарно.

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: WPF, .UIBindings & Acmgd
« Ответ #10 : 17-06-2014, 15:14:45 »
Проверил в 2011 - имена слоёв редактируется, флажки выставляются сразу, но в командной строке всё равно проскакивает _-LAYER:

Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение