Запутанная сборка, содержащая привязки данных к свойствам внутреннего класса
У меня есть 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. Вы должны иметь возможность заглянуть во вкладку "Переименовать" и исключить рассматриваемую модель представления из переименования.