Xamarin Forms Grid IsVisbile绑定仅以一种方式起作用

时间:2020-07-22 15:25:38

标签: c# ios xaml xamarin.forms binding

我发现我的XAML页面出现异常行为。 这是我的PageContent。我正在iOS模拟器中运行该应用。

SELECT asscfirstname, assclastname, trunc(addeddate), COUNT(*) 
FROM CLUD.masterassc
GROUP BY asscfirstname, assclastname, trunc(addeddate)
having count (*) >1
order by count(*) desc;

我的主要内容位于上方的网格中。页面正在处理时,主网格应该不可见,繁忙的网格应该变成可见。

要知道,只有主要内容变为不可见,但是繁忙的网格也保持不可见。

这是我的绑定属性。

<Grid>
<Grid.RowDefinitions>
            <RowDefinition Height="*"/>
        </Grid.RowDefinitions>

        <Grid IsVisible="{Binding IsBusy, Converter={StaticResource BooleanReverseVisibilityConverter}}">
            <!-- Main content -->
        </Grid>

        <Grid IsVisible="{Binding IsBusy}">
            <!-- Busy indicator -->
            <Label Text="Doing some stuff..."/>
        </Grid>
    </Grid>

我确实在private bool _isBusy = false; public bool IsBusy { get => _isBusy; set { if (_isBusy == value) return; _isBusy = value; OnPropertyChanged(); } } 中设置了IsBusy变量(也尝试了普通的AsyncCommand)。示例如下所示。

命令

Command

任务

CalculateCommand = new AsyncCommand(async () => await CalculateAction(), (t) => 
CalculateCommand_CanExcecute(t));

我想这与线程有关。我试图在主线程中调用private async Task CalculateAction() { IsBusy= true; try { IncrementalNumber++; //Do some calculation await ShellNavigationManager.GoToAsync(string.Format("{0}?cid={1}", ShellRoute.CalculationResultPage.ToString(), culc.Id), false); IsCalculating = false; } catch (Exception exc) { await Application.Current.MainPage.DisplayAlert( Strings.DialogUnexpectedErrorOccurredHeadline, string.Format(Strings.DialogUnexpectedErrorOccurredFormatedContent, exc.Message), Strings.Close ); IsBusy= false; } } 属性。

IsBusy

这似乎可行,但是这需要一段时间。计算几乎完成,直到调用将可视UI设置为当前状态。 我有点迷路了。 谢谢!

3 个答案:

答案 0 :(得分:0)

尝试使用触发器。

<Grid >
    <Grid.RowDefinitions>
        <RowDefinition Height="*"/>
    </Grid.RowDefinitions>

    <Grid IsVisible="false">
        <Label Text="MainContent"/>
        <Grid.Triggers>
            <DataTrigger TargetType="Grid" Binding="{Binding Source={x:Reference IsBusyGrid}, Path=IsVisible}" Value="false">
                <Setter Property="IsVisible" Value="True"/>
            </DataTrigger>
        </Grid.Triggers>
    </Grid>

    <Grid IsVisible="{Binding IsBusy}"
          x:Name="IsBusyGrid">
        <!-- Busy indicator -->
        <Label Text="Doing some stuff..."/>
    </Grid>
</Grid>

答案 1 :(得分:0)

我知道了。我似乎是Visual Studio中的错误。我只是剪切(ctrl + x)并再次粘贴了整个XAML代码。从那以后,它按预期工作。没有代码更改。.奇怪,但是很高兴它现在可以工作。

答案 2 :(得分:0)

就我而言,问题出在 bool _isBusy 属性中,缺少 {get; set;}

bool _isBusy // not working

bool _isBusy {get; set;} // solved