我想在我的viewmodel忙时禁用搜索栏。 我的视图中有以下xaml(视图的一部分):
<SearchBar x:Name="searchBar" TextChanged="OnSearchQueryChanged" Grid.Row="0" IsEnabled="{Binding IsBusy}"/>
<ActivityIndicator x:Name="progress" IsRunning="{Binding IsBusy}" IsVisible="{Binding IsBusy}"/>
两个元素都绑定到同一个属性,但是当我的ViewModel引发IsBusy = false时,SearchBar保持禁用状态。同一时间进展变得隐藏。
这里可能有什么问题?
答案 0 :(得分:6)
当您查看模型SearchBar.IsEnabled
属性为true
,而反之亦然时,您希望将IsBusy
属性设置为false
。
您现在正在做的事情是,当您的竞争模型不再忙碌时(IsEnabled
为假),禁用(将IsBusy
设置为false)搜索栏。
你需要一个转换器,一个对于false返回true,对于true返回false:
public class NotConverter:IValueConverter
{
public object Convert (object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
if (value.GetType () == typeof(bool))
return !((bool)value);
return value;
}
public object ConvertBack (object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
throw new NotImplementedException ();
}
}
为了在xaml中绑定中使用它,让我们将它的一个实例包含在包装xaml片段的容器中的资源中(让我们假设它是{{1} }),然后我们可以在ContentPage
标记扩展名中引用该转换器:
{Binding}