Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/257.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# MvvmCross可绑定MonoTouch.Dialog RadioElement_C#_Xamarin.ios_Mvvmcross_Monotouch.dialog - Fatal编程技术网

C# MvvmCross可绑定MonoTouch.Dialog RadioElement

C# MvvmCross可绑定MonoTouch.Dialog RadioElement,c#,xamarin.ios,mvvmcross,monotouch.dialog,C#,Xamarin.ios,Mvvmcross,Monotouch.dialog,我正在尝试创建一个可绑定的RadioElement以在MonoTouch中使用。在MvvmCross中实现对话,并按照中的模式(如中所建议),创建了以下类: public class MvxBindableRadioElement : RadioElement, IBindableElement { public IMvxBindingContext BindingContext { get; set; } public MvxBindableRadioElement ()

我正在尝试创建一个可绑定的RadioElement以在MonoTouch中使用。在MvvmCross中实现对话,并按照中的模式(如中所建议),创建了以下类:

public class MvxBindableRadioElement : RadioElement, IBindableElement
{
    public IMvxBindingContext BindingContext { get; set; }

    public MvxBindableRadioElement ()
    {
        this.CreateBindingContext();

        this.DelayBind(() => {
            var set = this.CreateBindingSet<MvxBindableRadioElement, PropertyCategory>();
            set.Bind().For(me => me.Caption).To(p => p.Id);
            set.Bind().For(me => me.Value).To(p => p.Value);
            set.Apply();
        });
    }

    protected override void Dispose(bool disposing)
    {
        if (disposing) {
            BindingContext.ClearAllBindings();
        }

        base.Dispose(disposing);
    }

    public virtual object DataContext
    {
        get { return BindingContext.DataContext; }
        set { BindingContext.DataContext = value; }
    }
}
其用途如下:

new Section {
    new RootElement ("Category", new RadioGroup ()) {
        new BindableSection<MvxBindableRadioElement> ().Bind(bindings, e => e.ItemsSource, vm => vm.PropertyCategories)
    }.Bind (bindings, e => e.RadioSelected, vm => vm.PropertyCategory) as Element
}
为解决此问题,我将上述MvvmCross回购中的
MvxBindableRadioElement
替换为
CustomStringElement

new MvxBindableSection<CustomStringElement>().Bind(bindings, element => element.ItemsSource, vm => vm.PropertyCategories)

好的,那么问题是关于
BindableSection
的实现(摘自): 除非使用
AddAll()
添加元素,否则不会设置
部分
元素的
父级
(即
null
)。这个问题实际上发生在Dialog山的内部

更新的
mvxbindable部分可用

MvxBind:Error: 12.12 Problem seen during binding execution for binding ItemsSource for PropertyCategories - problem TargetInvocationException: Exception has been thrown by the target of an invocation.
at System.Reflection.MonoMethod.Invoke (System.Object obj, BindingFlags invokeAttr, System.Reflection.Binder binder, System.Object[] parameters, System.Globalization.CultureInfo culture) [0x0005c] in /Developer/MonoTouch/Source/mono/mcs/class/corlib/System.Reflection/MonoMethod.cs:238 
at System.Reflection.MethodBase.Invoke (System.Object obj, System.Object[] parameters) [0x00000] in /Developer/MonoTouch/Source/mono/mcs/class/corlib/System.Reflection/MethodBase.cs:114 
at Cirrious.MvvmCross.Binding.Bindings.Target.MvxPropertyInfoTargetBinding.SetValueImpl (System.Object target, System.Object value) [0x00000] in <filename unknown>:0 
at Cirrious.MvvmCross.Binding.Bindings.Target.MvxConvertingTargetBinding.SetValue (System.Object value) [0x00000] in <filename unknown>:0 
at Cirrious.MvvmCross.Binding.Bindings.MvxFullBinding.UpdateTargetFromSource (System.Object value) [0x00000] in <filename unknown>:0 
InnerException was NullReferenceException: Object reference not set to an instance of an object
at <redacted>.iOS.Views.MvxBindableSection`1[<redacted>.Views.MvxBindableRadioElement].NotifyDataSetChanged () [0x000b9] in <redacted>/MonoTouch.Dialog/MvxBindableSection.cs:87 
at <redacted>.iOS.Views.MvxBindableSection`1[<redacted>.Views.MvxBindableRadioElement].SetItemsSource (IEnumerable value) [0x00094] in <redacted>/MonoTouch.Dialog/MvxBindableSection.cs:56 
at <redacted>.iOS.Views.MvxBindableSection`1[<redacted>.Views.MvxBindableRadioElement].set_ItemsSource (IEnumerable value) [0x00003] in <redacted>/MonoTouch.Dialog/MvxBindableSection.cs:30 
at (wrapper managed-to-native) System.Reflection.MonoMethod:InternalInvoke (System.Reflection.MonoMethod,object,object[],System.Exception&)
at System.Reflection.MonoMethod.Invoke (System.Object obj, BindingFlags invokeAttr, System.Reflection.Binder binder, System.Object[] parameters, System.Globalization.CultureInfo culture) [0x00044] in /Developer/MonoTouch/Source/mono/mcs/class/corlib/System.Reflection/MonoMethod.cs:230
new MvxBindableSection<CustomStringElement>().Bind(bindings, element => element.ItemsSource, vm => vm.PropertyCategories)
at CrossUI.Touch.Dialog.Elements.RadioElement.SubscribeToRoot () [0x00000] in <filename unknown>:0 
at CrossUI.Touch.Dialog.Elements.RadioElement.GetCellImpl (MonoTouch.UIKit.UITableView tv) [0x00000] in <filename unknown>:0 
at CrossUI.Touch.Dialog.Elements.Element.GetCell (MonoTouch.UIKit.UITableView tv) [0x00000] in <filename unknown>:0 
at CrossUI.Touch.Dialog.DialogViewController+Source.GetCell (MonoTouch.UIKit.UITableView tableView, MonoTouch.Foundation.NSIndexPath indexPath) [0x00000] in <filename unknown>:0 
at (wrapper managed-to-native) MonoTouch.UIKit.UIApplication:UIApplicationMain (int,string[],intptr,intptr)
at MonoTouch.UIKit.UIApplication.Main (System.String[] args, System.String principalClassName, System.String delegateClassName) [0x0004c] in /Developer/MonoTouch/Source/monotouch/src/UIKit/UIApplication.cs:38 
at PGPCapture.iOS.Application.Main (System.String[] args) [0x00008] in <redacted>/Main.cs:21