如何使用绑定隐藏contentview.On平台参数中如何使用绑定?请检查以下屏幕截图是否有问题。
在像showjoin这样的屏幕快照示例中,可见为true。那很好但showjoin为false时,由于onflatform为true,默认情况下将显示contentview。
请帮助我也解决此问题
答案 0 :(得分:1)
a)在Viewmodel中创建一个布尔属性,例如IsContentViewVisible
b)将此属性绑定到contentview IsVisible属性,例如IsVisible =“ {Binding IsContentViewVisible}”,还应确保Raisepropertychanged事件到位。
c)根据需要,在ViewModel中将IsContentViewVisible属性设置为False / true。
答案 1 :(得分:1)
如果您只想在平台为ContentView
时隐藏Android
,我建议您在xaml中使用OnPlatform
。另外,设置ContentView的IsVisible
属性两次通常不会很好。
使用上方的 xaml :
<OnPlatform x:TypeArguments="View">
<On Platform="iOS">
<ContentView Margin="20,10,20,20" HeightRequest="40">
<!-- Rest of ContentView code -->
</ContentView>
</On>
<!-- You must specify an Android view -->
<On Platform="Android">
<!-- Use a simple boxview with height and width 0 to create an empty view -->
<BoxView HeightRequest="0" WidthRequest="0" IsVisible="False"/>
</On>
</OnPlatform>
这只会在使用 iOS 时在页面上显示ContentView
,而在 Android 上则什么也不会显示。
答案 2 :(得分:0)
问题还没有全部解决……但是,如果您想避免XAML OnPlatform覆盖(因为它没有使用Binding),则可以在XAML中将其删除,而只需在ShowJoinButton bool属性中添加正确的逻辑即可。
您可以像这样检查代码中的平台(甚至在ViewModel中):
if(Device.RuntimePlatform == Device.iOS) ...
如果您仍然希望XAML中包含所有内容,那么当然也可以。
您可以在OnPlatform
内使用Binding,需要注意的是类型参数必须为BindingBase
!
<OnPlatform x:TypeArguments="BindingBase" iOS="{Binding MyBool}" Android="{Binding MyBool}"/>
答案 3 :(得分:0)
下面是在ViewModel类中编写绑定的代码
private const string ShowJoinButtonPropertyName = "ShowJoinButton";
private bool showJoinButton = false;
public bool ShowJoinButton
{
get { return showJoinButton; }
set { SetProperty(ref showJoinButton, value, ShowJoinButtonPropertyName); }
}
要隐藏/显示的任何地方,都需要使用以下代码
if (Device.RuntimePlatform == Device.Android)
{
ShowJoinButton = false;
}
else
{
ShowJoinButton = true;
}
希望有帮助!