MvvmCross将ObservableCollection <myitem>绑定到ObservableCollection <object> </object> </myitem>

时间:2015-02-16 13:20:51

标签: c# android mvvm xamarin mvvmcross

我制作了一个自定义视图(MyCustomView),可以在android layout xml中使用。单击它时,它会打开一个包含列表的对话框(MyDialog)。

MainPageLayout - &gt; MyCustomView - &gt; 点击 - &gt; MyDialog

MyDialog继承自MvxDialogFragment:

public class MyDialog : MvxDialogFragment
{
    public event EventHandler ItemSourceChanged;

    public ObservableCollection<MyItem> ItemsSource
    {
        get
        {
            return itemsSource;
        }

        set
        {
            itemsSource = value;
            if (ItemSourceChanged != null)
            {
                ItemSourceChanged.Invoke(this, new EventArgs());
            }
        }
    }

    public override View OnCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
    {
        var ignored = base.OnCreateView(inflater, container, savedInstanceState);
        var view = this.BindingInflate(Resource.Layout.my_layout, container, false);
        var listview = view.FindViewById<MvxListView>(Resource.Id.my_listview);
        listview.ItemsSource = ItemsSource;
        return view;
    }
}

ViewModel:

public class MyViewModel : MvxViewModel
{
    public ObservableCollection<MyItem> MyCollection
    {
        get { return myCollection; }
        private set { SetProperty(ref myCollection, value); }
    }
}

到目前为止,这么好 - 这可以按预期工作。在视图中创建绑定集,以及VM&#34; MyCollection&#34;的列表。显示。

但是,我非常希望将MyDialog与其他不同的集合一起使用,而不仅仅是ObservableCollection<MyItem>。为了实现这一点,我将MyDialog中的ItemsSource更改为ObservableCollection<object>,但这会导致其setter不再被调用(通过绑定集),因此listview的itemSource设置为null。

如何让MyDialog更通用?

2 个答案:

答案 0 :(得分:0)

公共课MyDialog<T>会使其成为通用的。

示例:www.dotnetperls.com/generic

答案 1 :(得分:0)

您是否尝试使用动态?

public ObservableCollection<dynamic> ItemsSource

我使用动态对象将对象和集合从一个ViewModel传递到下一个