Запутанная сборка, содержащая привязки данных к свойствам внутреннего класса

У меня есть UserControl с классом ViewModel как DataContext:

XAML

<UserControl ... >    
    <TextBox Text="{Binding ViewModelProperty}"/>
</UserControl>

CodeBehind:

namespace DotfuscatorTest.UserControl.View
{
   using ViewModel;
   public partial class UserControlView
   {
      public UserControlView()
      {
         InitializeComponent();
         DataContext = new UserControlViewModel();         
      }
   }
}

Класс ViewModel:

namespace DotfuscatorTest.UserControl.ViewModel
{
   internal class UserControlViewModel
   {
      private string viewModelProperty = "hello world";

      public string ViewModelProperty
      {
        get { return viewModelProperty; }
        set { viewModelProperty = value; }
      }
   }
}

Этот пример работает нормально (привязка данных работает правильно). Но теперь, когда я запутываю эту сборку с помощью Dotfuscator (версия 4.9.7750), привязка не работает. Если я сделаю класс UserControlViewModel общедоступным, приложение будет работать нормально и после запутывания.

Как я понимаю, Dotfuscator не меняет имя свойства, когда оно является публичным, но меняет его, если это частный или внутренний класс.

Мой вопрос сейчас, как вы справляетесь с этой проблемой. Я думаю, что обычно есть внутренние классы со свойствами, которые используются в DataBindings, не так ли? Или есть способ настроить Dotfuscator?

Заранее спасибо, rhe1980

1 ответ

По умолчанию Dotfuscator выполняет обфускацию (переименование) имени свойства, что по своей сути нарушает привязки XAML. Он попытается исправить это, также переименовав цель привязки в XAML, но не всегда успешно, как в этой ситуации. Самый простой способ исправить это без изменения кода - добавить исключение переименования в Dotfuscator. Вы должны иметь возможность заглянуть во вкладку "Переименовать" и исключить рассматриваемую модель представления из переименования.

Другие вопросы по тегам