MvvmCross vnext:monodroid binding Dictionary类似于wp7

时间:2012-10-15 16:07:36

标签: c# windows-phone-7 xamarin.ios xamarin.android mvvmcross

当我在Tutorial.Core中更改MainMenuViewModel以使用这样的词典时:

`public Dictionary Items {get;组; }     公共ICommand ShowItemCommand     {         得到         {             返回新的MvxRelayCommand>((type)=> DoShowItem(type.Value));         }     }

public void DoShowItem(Type itemType)
{
    this.RequestNavigate(itemType);
}

public MainMenuViewModel()
{
    Items = new Dictionary<string, Type>()
                {
                    {"SimpleTextProperty",  typeof(Lessons.SimpleTextPropertyViewModel)},
                    {"PullToRefresh",  typeof(Lessons.PullToRefreshViewModel)},
                    {"Tip",  typeof(Lessons.TipViewModel)},
                    {"Composite",typeof(Lessons.CompositeViewModel)},
                    {"Location",typeof(Lessons.LocationViewModel)}
                };
}`

示例在wp7中按预期工作,但是使用monodroid我收到错误::“MvxBind:错误:2,71在从Item到ItemsSource的绑定执行期间出现问题 - 问题ArgumentException:无法转换参数”因为我认为KeyValuePair Key属性导致问题:

<LinearLayout
        xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:local="http://schemas.android.com/apk/res/Tutorial.UI.Droid"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
          android:layout_margin="12dp"
        android:orientation="vertical">
<TextView
          android:layout_width="fill_parent"
          android:layout_height="wrap_content"
          android:text="View Model:"
        />
  <TextView
          android:layout_width="fill_parent"
          android:layout_height="wrap_content"
          android:textAppearance="?android:attr/textAppearanceLarge"
          local:MvxBind="{'Text':{'Path':'Key'}}"
        />
</LinearLayout>

提前感谢您的帮助。

1 个答案:

答案 0 :(得分:2)

问题是mvxbindablelistview需要一个支持IList接口的对象 - 因此它当前无法绑定到Dictionary。

这就是'ArgumentException:转换参数失败'告诉我们的。


如果您想使用字典,那么您可以应用将字典映射到List()的转换器


如果您认为这是mvx中缺少的功能 - 如果您认为列表应该绑定到任何可发布的(或者可能是任何icollection),那么请在github上记录这是一个问题。


更新 - 已在https://github.com/slodge/MvvmCross/issues/38上执行此操作 - 现在行为已更改。