BindingMode =隐藏在代码后面的双向

问题描述 投票:2回答:1

编辑:为错误的标题表示歉意,显然诸如“在代码后面设置绑定模式”之类的内容不符合SO的高度含糊要求。标题显然比当前标题更明显。

原始内容:我试图在其数据选择器模板后面的代码中设置列表视图的绑定。我这样做的原因是,我怀疑(因为在不同的模板选择器中做了类似于它的操作),一旦退出该页面,android似乎仍然包含对它的引用,然后抛出amarin.forms.platform。 android.viewcellrenderer处置对象异常。

我当前的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>

这是我的代码后面:

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);
            }
        }
    }

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

xamarin.forms xamarin.android
1个回答
1
投票

您会这样做:

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

供参考:BindingModeRemarks page

© www.soinside.com 2019 - 2024. All rights reserved.