Xamarin.Android System.TypeInitializationException:' ReactiveUI.ControlFetcherMixin'的类型初始值设定项。抛出一个例外

时间:2017-11-24 08:20:48

标签: xamarin.android reactiveui

尝试使用Xamarin.Android + ReactiveUI调用WireUpControls()时出现以下异常。

  

System.TypeInitializationException:类型初始值设定项   ' ReactiveUI.ControlFetcherMixin'抛出异常

我已经检查过以下内容,但我仍然得到例外。

  1. https://reactiveui.net/docs/handbook/data-binding/xamarin-android/wire-up-controls
  2. 中定义的控件的命名约定
  3. 通过更改解决策略。
  4. 我在布局中只有一个ListView。

    主要活动:

    protected override void OnCreate(Bundle savedInstanceState)
            {
                base.OnCreate(savedInstanceState);
    
                SetContentView(Resource.Layout.Main);
                this.WireUpControls(ControlFetcherMixin.ResolveStrategy.ExplicitOptIn);
                SetupUserInterface();
    
                this.OneWayBind(ViewModel, x => x.OutletListing, x => x.OutletListItems).DisposeWith(SubscriptionDisposables);
    
            }
    

    更新 找到内部异常

    +       ex  {System.TypeInitializationException: The type initializer for 'ReactiveUI.ControlFetcherMixin' threw an exception. ---> System.InvalidOperationException: You're using multiple resource ID's with the same name but with different casings which isn't allowed for WireUpControls: { Image = image }, { Text = text }, { Text2 = text2 } ---> System.ArgumentException: An item with the same key has already been added. Key: image
      at System.Collections.Generic.Dictionary`2[TKey,TValue].TryInsert (TKey key, TValue value, System.Collections.Generic.InsertionBehavior behavior) [0x000bb] in <896ad1d315ca4ba7b117efb8dacaedcf>:0 
      at System.Collections.Generic.Dictionary`2[TKey,TValue].Add (TKey key, TValue value) [0x00000] in <896ad1d315ca4ba7b117efb8dacaedcf>:0 
      at System.Linq.Enumerable.ToDictionary[TSource,TKey,TElement] (System.Collections.Generic.IEnumerable`1[T] source, System.Func`2[T,TResult] keySelector, System.Func`2[T,TResult] elementSelector, System.Collections.Generic.IEqualityComparer`1[T] comparer) [0x0009e] in <b5bd9d990a0b4733885e90ca5ec6c0fb>:0 
      at System.Linq.Enumerable.ToDictionary[TSource,TKey,TElement] (System.Collections.Generic.IEnumerable`1[T] source, System.Func`2[T,TResult] keySelector, System.Func`2[T,TResult] elementSelector) [0x00000] in <b5bd9d990a0b4733885e90ca5ec6c0fb>:0 
      at ReactiveUI.ControlFetcherMixin..cctor () [0x00048] in C:\projects\reactiveui\src\ReactiveUI\Android\ControlFetcherMixin.cs:34 
       --- End of inner exception stack trace ---
      at ReactiveUI.ControlFetcherMixin..cctor () [0x0010c] in C:\projects\reactiveui\src\ReactiveUI\Android\ControlFetcherMixin.cs:45 
       --- End of inner exception stack trace ---
    

1 个答案:

答案 0 :(得分:1)

您的实际异常可能在InnerException中,请特别注意文档中的这段文字:

  

由于字典是在名称的小写变体上编制索引,因此在布局中使用不同的外壳不能使用相同的资源名称两次。 Android在生成资源ID时区分大小写,因此将其映射到单个资源ID以与WireUpControl一起使用是不可能的。

您可能正在使用多个相似但只有外壳不同的资源名称。