如何在xamarin中使用参数隐藏按钮?

时间:2018-07-05 07:17:31

标签: xamarin xamarin.forms

如何使用绑定隐藏contentview.On平台参数中如何使用绑定?请检查以下屏幕截图是否有问题。

enter image description here

在像showjoin这样的屏幕快照示例中,可见为true。那很好但showjoin为false时,由于onflatform为true,默认情况下将显示contentview。

请帮助我也解决此问题

4 个答案:

答案 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;
}

希望有帮助!