Xamarin.forms BindingMode=codebehind中的双向

Xamarin.forms BindingMode=codebehind中的双向,xamarin.forms,xamarin.android,Xamarin.forms,Xamarin.android,编辑:为这个糟糕的标题道歉,显然像“在代码隐藏中设置绑定模式”这样的东西不符合SO非常模糊的要求。一个明显比现在的更明显的标题 我试图在listview的数据选择器模板的代码隐藏中设置listview的绑定。我这样做的原因,正如我所怀疑的(因为在不同的模板选择器中执行类似的操作修复了它),一旦退出该页面,android似乎仍然包含对它的引用,然后抛出一个amarin.forms.platform.android.viewcellrendererA已处理对象异常 我当前的xaml如下所示: <

编辑:为这个糟糕的标题道歉,显然像“在代码隐藏中设置绑定模式”这样的东西不符合SO非常模糊的要求。一个明显比现在的更明显的标题

我试图在listview的数据选择器模板的代码隐藏中设置listview的绑定。我这样做的原因,正如我所怀疑的(因为在不同的模板选择器中执行类似的操作修复了它),一旦退出该页面,android似乎仍然包含对它的引用,然后抛出一个amarin.forms.platform.android.viewcellrendererA已处理对象异常

我当前的xaml如下所示:

<StackLayout Orientation="Vertical" 
                             Padding="0, 20, 0, 0"
                             HorizontalOptions="FillAndExpand"
                             VerticalOptions="StartAndExpand">

        <Label 
            x:Name="LabelName"
            FontAttributes="Bold"
            TextColor="Black"
            FontSize="14"
            VerticalOptions="Start"
            HorizontalOptions="FillAndExpand"/>


        <ListView x:Name="MultiselectList"
               SeparatorVisibility="None"
               RowHeight="30"
               Margin="0, 10, 0, 0"
               VerticalOptions="FillAndExpand"
               HorizontalOptions="StartAndExpand"                 
               SelectedItem="{Binding SelectedItem, Mode=TwoWay}">
            <ListView.ItemTemplate>
                <DataTemplate>
                    <customcontrols:NoHighlightCell>
                        <StackLayout Orientation="Horizontal" 
                                         HorizontalOptions="FillAndExpand"
                                         VerticalOptions="StartAndExpand">

                            <Image 
                                x:Name="image"
                                Source="{Binding ImageUrl}"  
                                VerticalOptions="StartAndExpand"
                                HorizontalOptions="Start"
                                Margin="0, 2, 0, 0"
                                WidthRequest="15" 
                                HeightRequest="15" />

                            <Label        
                                x:Name="name"
                                Text="{Binding Name}"  
                                TextColor="Black"
                                VerticalOptions="StartAndExpand"
                                FontSize="14"
                                HorizontalOptions="Start"/>
                        </StackLayout>
                    </customcontrols:NoHighlightCell>
                </DataTemplate>
            </ListView.ItemTemplate>
        </ListView>


        <Label Text="Selection required"
                   TextColor="Red"
                   Margin="0, 10, 0, 0"
                   IsVisible="{Binding ValidationRequired}"
                   VerticalOptions="StartAndExpand"
                   HorizontalOptions="FillAndExpand"
                   FontSize="14"/>

    </StackLayout>

我尝试了.SetBinding,但它一直说BindingMode是一个类型(假设它是一个枚举)。查看MSDN上的一些示例并没有真正起到帮助作用

您可以这样做:

MultiselectList.SetBinding(ListView.ItemsSourceProperty,nameof(viewModels.CheckboxItems),BindingMode.TwoWay);
  • 第一个参数是要绑定到的属性,例如
    ItemsSource
  • 第二个参数是要查找的属性的名称-例如,viewModel的
    CheckBoxItems
    。此集合将绑定/填充到列表中
  • 最后一个参数是您想要实现的-绑定模式
    BindingMode
    。您说它是一个枚举是正确的,所以在这里我们可以将它设置为
    BindingMode.TwoWay

  • 参考:
    BindingMode

    谢谢,这帮了大忙。我将它从itemSource改为SelectEditeProperty。我没有得到您想要绑定的内容,这就是为什么我添加了一些解释,以便您可以自己更改它。很高兴它成功了
    private SoapNoteControlsViewModel viewModel;
    
            public SelectListTemplate()
            {
                InitializeComponent();
            }
    
            protected override void OnDisappearing()
            {
                base.OnDisappearing();
            }
    
            protected override void OnAppearing()
            {
                base.OnAppearing();
    
                LabelName.Text = viewModel.Label;
    
                MultiselectList.ItemsSource = viewModel.CheckboxItems;
                MultiselectList.SelectedItem = viewModel.SelectedItem;
                //how would i set the BindingMode here? Doing .SetBinding doesn't seem to do it.
    
            }
    
            protected override void OnBindingContextChanged()
            {
                try
                {
                    base.OnBindingContextChanged();
    
                    if(BindingContext == null)
                    {
                        return;
                    }
    
                    viewModel = BindingContext as SoapNoteControlsViewModel;
    
                } catch (Exception e)
                {
                    Console.WriteLine(e);
                }
            }
        }