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