2013-06-25 54 views
0

我有一個ListView和AppBar的頁面。我想確保AppBar不能打開/可見,除非ListViews的選定項目不爲空。Windows Store應用程序:綁定應用程序欄IsOpen屬性到ListView所選項目

所以我實現了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是的IValueConverter支票返回基於一個布爾值,如果在GridView的的SelectedItem爲空或不是。

即使GridView Selected Item爲null,AppBar也會出現。

這裏有什麼可能是錯的?

+1

有一些控制依賴項屬性值的優先規則(http://msdn.microsoft.com/zh-cn/library/ms743230.aspx)可能在此處播放。那就是說,你確定你想創造這樣的行爲嗎?這是一個相當主觀的,但我認爲它可能不是一個用戶直觀的應用欄有時出現,而不是其他人。也許可以將應用欄上各種命令的啓用綁定到選定狀態,甚至可以在沒有選擇的情況下在欄上包含一些文本,以便爲用戶提供關於如何啓用各種功能的提示? –

+0

謝謝尼爾。我有一個項目列表,以及當選擇一個項目時變得可見的按鈕。我認爲將這些按鈕放在應用欄中會很明智,然後在選擇某個項目時將其打開。事實證明,這很難做到,我一直在尋找XAML中的解決方案。現在,如果我正確地理解了你,你就是說這根本不是一個好主意。保留一組命令的應用欄,並且在選擇某個項目時不要更改它。我同意 - 用戶會發現這令人困惑。另外,感謝關​​於依賴屬性優先規則的鏈接。 –

回答

0

我剛測試過它,看起來,綁定不起作用AppBar.IsOpen

我勢必一個Button.IsEnabledGridView.SelectedItem以及,按鈕被正確設置到false,但AppBar.IsOpen沒有,轉換隻按鈕綁定調用一次。

它可能有一些與此有關:http://msdn.microsoft.com/en-us/library/windows/apps/windows.ui.xaml.controls.appbar.isopen

注意綁定到IsOpen屬性,因爲當該屬性設置不會發生的PropertyChanged通知沒有預期的結果。

雖然我認爲這隻意味着另一個方向。 (編輯:這裏是一個simialar後:opening the appbar in metro style apps using binding property

下面是我使用的代碼:

<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(); 
    } 
} 
0

綁定Visibility屬性具有的SelectedItem和具有轉換器崩潰該項目在空值的情況下。此外,我懷疑在selectedItem爲null轉換器被調用的情況下。只需重新檢查一下,就可以解決問題。

相關問題