如何通过 Bindable 属性 设置 Xamarin.Forms Shell 搜索的可见性 属性?
How to set visibility property of Xamarin.Forms Shell Search through Bindable Property?
我正在为 Android 和 iOS 使用 Xamarin.Forms(版本 5.0.0.2012)Shell 应用程序。在应用程序中,我有一个概念,如果用户登录,我必须显示 Shell 搜索框 ,否则必须隐藏搜索框。我遵循标准的 MVVM 模式。
<Shell.SearchHandler>
<helper:ProductSearchHandler Placeholder="Search by Title, ISBN, Publisher" TextColor="{StaticResource Primary}" FontSize="Micro"
ShowsResults="true" SearchBoxVisibility="{Binding TopSearchVisibility}" DisplayMemberName="Name"
ItemTemplate="{StaticResource ProductSearchTemplate}" />
</Shell.SearchHandler>
以上是在我的 ContentPage 中放置 Search 的代码。
TopSearchVisibility 是我的可绑定对象 属性,我将值绑定到它,它像往常一样继承了 BaseViewModel 的视图模型。
ProductSearchHandler 是搜索处理程序 class.
在我的视图模型中,
// Declaration with default value
public string topSearchVisibility = "Collapsible";
public string TopSearchVisibility
{
get { return topSearchVisibility; }
set
{
topSearchVisibility = value;
OnPropertyChanged();
}
}
从API服务调用获取用户数据后,我正在根据UserId进行显示或隐藏搜索框的过程,如下
long userID = ... from API;
if (userID > 0)
TopSearchVisibility = "Hidden";
else
TopSearchVisibility = "Collapsible";
页面加载后,Shell SearchHandler 的 SearchBoxVisibility 属性 始终仅绑定其默认值 Expanded。因此,页面具有 Shell 搜索的扩展视图。 Shell 搜索不采用可绑定的 属性 值。如何通过 Shell 搜索实现我的要求?
您可以使用 IValueConverter Interface 将 string
转换为 SearchBoxVisibility
属性。
喜欢:
创建 SearchVisibleConvert
:
public class SearchVisibleConvert : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
SearchBoxVisibility searchBoxVisibility = SearchBoxVisibility.Expanded;
if (value !=null)
{
switch (value)
{
case "Hidden":
searchBoxVisibility = SearchBoxVisibility.Hidden;
break;
case "Collapsible":
searchBoxVisibility = SearchBoxVisibility.Collapsible;
break;
default:
searchBoxVisibility = SearchBoxVisibility.Expanded;
break;
}
}
return searchBoxVisibility;
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
}
在您的 xaml 中使用:
...
<ContentPage.Resources>
<ResourceDictionary>
<controls:SearchVisibleConvert x:Key="visibleConvert" />
</ResourceDictionary>
</ContentPage.Resources>
<Shell.SearchHandler>
<helper:ProductSearchHandler Placeholder="Search by Title, ISBN, Publisher" TextColor="{StaticResource Primary}" FontSize="Micro"
ShowsResults="true" SearchBoxVisibility="{Binding TopSearchVisibility, Converter={StaticResource visibleConvert}}" DisplayMemberName="Name"
ItemTemplate="{StaticResource ProductSearchTemplate}" />
</Shell.SearchHandler>
我正在为 Android 和 iOS 使用 Xamarin.Forms(版本 5.0.0.2012)Shell 应用程序。在应用程序中,我有一个概念,如果用户登录,我必须显示 Shell 搜索框 ,否则必须隐藏搜索框。我遵循标准的 MVVM 模式。
<Shell.SearchHandler>
<helper:ProductSearchHandler Placeholder="Search by Title, ISBN, Publisher" TextColor="{StaticResource Primary}" FontSize="Micro"
ShowsResults="true" SearchBoxVisibility="{Binding TopSearchVisibility}" DisplayMemberName="Name"
ItemTemplate="{StaticResource ProductSearchTemplate}" />
</Shell.SearchHandler>
以上是在我的 ContentPage 中放置 Search 的代码。
TopSearchVisibility 是我的可绑定对象 属性,我将值绑定到它,它像往常一样继承了 BaseViewModel 的视图模型。
ProductSearchHandler 是搜索处理程序 class.
在我的视图模型中,
// Declaration with default value
public string topSearchVisibility = "Collapsible";
public string TopSearchVisibility
{
get { return topSearchVisibility; }
set
{
topSearchVisibility = value;
OnPropertyChanged();
}
}
从API服务调用获取用户数据后,我正在根据UserId进行显示或隐藏搜索框的过程,如下
long userID = ... from API;
if (userID > 0)
TopSearchVisibility = "Hidden";
else
TopSearchVisibility = "Collapsible";
页面加载后,Shell SearchHandler 的 SearchBoxVisibility 属性 始终仅绑定其默认值 Expanded。因此,页面具有 Shell 搜索的扩展视图。 Shell 搜索不采用可绑定的 属性 值。如何通过 Shell 搜索实现我的要求?
您可以使用 IValueConverter Interface 将 string
转换为 SearchBoxVisibility
属性。
喜欢:
创建 SearchVisibleConvert
:
public class SearchVisibleConvert : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
SearchBoxVisibility searchBoxVisibility = SearchBoxVisibility.Expanded;
if (value !=null)
{
switch (value)
{
case "Hidden":
searchBoxVisibility = SearchBoxVisibility.Hidden;
break;
case "Collapsible":
searchBoxVisibility = SearchBoxVisibility.Collapsible;
break;
default:
searchBoxVisibility = SearchBoxVisibility.Expanded;
break;
}
}
return searchBoxVisibility;
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
}
在您的 xaml 中使用:
...
<ContentPage.Resources>
<ResourceDictionary>
<controls:SearchVisibleConvert x:Key="visibleConvert" />
</ResourceDictionary>
</ContentPage.Resources>
<Shell.SearchHandler>
<helper:ProductSearchHandler Placeholder="Search by Title, ISBN, Publisher" TextColor="{StaticResource Primary}" FontSize="Micro"
ShowsResults="true" SearchBoxVisibility="{Binding TopSearchVisibility, Converter={StaticResource visibleConvert}}" DisplayMemberName="Name"
ItemTemplate="{StaticResource ProductSearchTemplate}" />
</Shell.SearchHandler>