2

ViewModel クラスを DataContext として持つ UserControl があります。

XAML

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

分離コード:

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 クラスを public にすると、アプリケーションは難読化後も正常に動作します。

私が理解しているように、Dotfuscator はパブリックの場合はプロパティの名前を変更しませんが、プライベート クラスまたは内部クラスの場合は変更します。

私の質問は、この問題をどのように処理するかです。DataBinding で使用されるプロパティを持つ内部クラスを持つのは一般的だと思いますね。または、Dotfuscator を構成する方法はありますか?

よろしくお願いします、rhe1980

4

1 に答える 1

2

デフォルトでは、Dotfuscator はプロパティ名の難読化 (名前の変更) を実行します。これにより、本質的に XAML バインディングが壊れます。XAML でバインド ターゲットの名前も変更することで、これを修正しようとしますが、この状況のように常に成功するとは限りません。コードを変更せずにこれを修正する最も簡単な方法は、名前変更の除外を Dotfuscator に追加することです。「名前の変更」タブを見て、問題のViewModelを名前の変更から除外できるはずです。

于 2012-08-17T22:59:45.847 に答える