0

ListView と AppBar を含むページがあります。ListViews の選択された項目が null でない限り、AppBar を開いたり表示したりできないようにしたいと考えています。

だから私はこのようにAppBarを実装しました:

<Page.BottomAppBar>
        <AppBar x:Name="bottomAppBar" Padding="10,0,10,0">
            <AppBar.IsOpen>
                <Binding ElementName="MyGrid" Path="SelectedItem" Converter="{StaticResource ValueToBooleanConverter}"/>
            </AppBar.IsOpen>
        </AppBar>
    </Page.BottomAppBar>

ValueToBooleanConverterは、GridView の SelectedItem が null であるかどうかに基づいてブール値を返すことを確認する IValueConverter です。

GridView Selected Item が null の場合でも、AppBar が表示されます。

ここで何が間違っている可能性がありますか?

4

3 に答える 3

0

Visibility プロパティを SelectedItem にバインドし、null 値の場合にアイテムを折りたたむコンバーターを用意します。再確認するだけで問題は解決します。

于 2013-06-26T08:03:01.673 に答える
0

私はそれをテストしたところ、バインディングが で動作しないようAppBar.IsOpenです。

a もバインドしButton.IsEnabledましたGridView.SelectedItemが、ボタンは に正しく設定されてfalseいましたAppBar.IsOpenが、そうではありませんでした。コンバーターは、ボタンのバインドに対して 1 回しか呼び出されませんでした。

これと関係があるかもしれません: http://msdn.microsoft.com/en-us/library/windows/apps/windows.ui.xaml.controls.appbar.isopen

IsOpen プロパティへのバインドは、プロパティが設定されているときに PropertyChanged 通知が発生しないため、期待どおりの結果をもたらしません。

私はそれが反対の方向だけを意味すると思っていましたが。(編集:これは同様の投稿です:バインディングプロパティを使用してメトロスタイルアプリでアプリバーを開く

使用したコードは次のとおりです。

<common:LayoutAwarePage.BottomAppBar>
    <AppBar IsOpen="{Binding SelectedItem, Converter={StaticResource ObjectToBooleanConverter}, ElementName=gridView}"
            IsSticky="True"
            Background="#E5F50000" />
</common:LayoutAwarePage.BottomAppBar>


<Grid Style="{StaticResource LayoutRootStyle}">
    <Grid.RowDefinitions>
        <RowDefinition Height="140" />
        <RowDefinition Height="*" />
    </Grid.RowDefinitions>

    <GridView x:Name="gridView"
              HorizontalAlignment="Right"
              Margin="0"
              Grid.Row="1"
              Width="469">
        <Button Content="asdf" />
        <Button Content="asdf" />
        <Button Content="asdf" />
    </GridView>
    <Button x:Name="bsetnull"
            Content="setnull"
            HorizontalAlignment="Left"
            Margin="78,10,0,0"
            Grid.Row="1"
            VerticalAlignment="Top" Tapped="bsetnull_Tapped"/>
    <Button x:Name="bsettoone"
            Content="settoone"
            HorizontalAlignment="Left"
            Margin="78,71,0,0"
            Grid.Row="1"
            VerticalAlignment="Top" Tapped="bsettoone_Tapped"/>
    <Button Content="Button"
            HorizontalAlignment="Left"
            Margin="78,147,0,0"
            Grid.Row="1"
            VerticalAlignment="Top"
            IsEnabled="{Binding SelectedItem, Converter={StaticResource ObjectToBooleanConverter}, ElementName=gridView}" />

</Grid>

そしてコンバーター

public class ObjectToBooleanConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, string language)
    {
        if (value == null)
            return false;
        else
            return true;
    }

    public object ConvertBack(object value, Type targetType, object parameter, string language)
    {
        throw new NotImplementedException();
    }
}
于 2013-06-25T14:32:38.887 に答える