在Xamarin.Forms中更改属性时,不会更新SearchBar.IsEnabled绑定

时间:2014-06-19 20:42:04

标签: data-binding xamarin searchbar xamarin.forms

我想在我的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保持禁用状态。同一时间进展变得隐藏。

这里可能有什么问题?

1 个答案:

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