2015-04-02 83 views
0

在Windows Phone 8應用程序中, 我有一個包含2個TextBlocks和一個按鈕的列表框。 我有一個2字符串和布爾值列表&我能夠將字符串綁定到TextBlocks。WP8列表框中的綁定項目

<ListBox Name="ListboxTest"> 
    <ListBox.ItemTemplate> 
     <DataTemplate> 
      <TextBlock Text="{Binding Key}" TextWrapping="Wrap"/> 
      <TextBlock Text="{Binding Value}" TextWrapping="Wrap"/> 
      <Button /> 
     </DataTemplate> 
    </ListBox.ItemTemplate> 
</ListBox> 

這是綁定到列表框的C#代碼。

public class Detail 
{ 
    public string Key { get; set; } 
    public string Value { get; set; } 
    public bool check { get; set; } 
} 
public List<Detail> ClassList = new List<Detail>(); 
ListboxTest.ItemsSource = ClassList; 

我只想在布爾值爲真時才顯示按鈕。 我該怎麼做?

+0

你能分享XAML嗎? – bit 2015-04-02 05:59:43

+0

@bit我已經添加了xaml代碼。 – 2015-04-02 06:05:04

回答

1

看看this。其實你真正需要的是轉換器通過實施IValueConverterThis也是一個很好的例子,你可以閱讀它。將布爾值與按鈕的visibility屬性綁定,即可完成! ;)

+0

我不認爲IValueConverter對按鈕的可見性有任何影響。 – 2015-04-02 06:10:10

+0

@SundaraRajanC在以下示例中作爲** NguyenKien **編寫了您準確瞭解界面** IValueConverter **的實現方式。 – nikogram 2015-04-02 06:14:56

+0

但是@SundaraRajanC如果你閱讀我發送給你的第一個鏈接,理解轉換器是什麼,那麼它會更好。 – nikogram 2015-04-02 06:16:47

1

您可以使用布爾能見度轉換器隱藏,顯示按鈕 下面是例子:

public class BoolToVisibility : IValueConverter 
    { 
     public object Convert(object value, Type targetType, object parameter, CultureInfo culture) 
     { 
      var boolValue = false; 
      if (value != null) boolValue = (bool)value; 
      return boolValue ? Visibility.Visible : Visibility.Collapsed; 
     } 

     public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) 
     { 
      throw new NotImplementedException(); 
     } 
    } 

在App.xaml中

<my:BoolToVisibility x:Key="BoolToVisibility"/> 

在您的數據模板

<Button Visibility="{Binding Path=YourBoolProperty,Converter={StaticResource BoolToVisibility}}> 
+0

在我的情況下,它會是綁定路徑=檢查,對吧? [其中檢查是布爾類型,引用在問題中共享的代碼] – 2015-04-02 06:27:10

+0

右.....(10個字符) – 2015-04-02 07:20:41

1

請嘗試使用觸發器。

windows phone中的各種觸發器Msdn

請使用WP8中的ObservableCollection進行綁定而不是List。

請使您的屬性與INotifyPropertyChanged一起實施如果您的布爾屬性未與inotifypropertychanged一起實施,視圖將不知道該值發生了變化。儘管數據觸發器不起作用。

命名空間

xmlns:interactivity="clr-namespace:System.Windows.Interactivity;assembly=System.Windows.Interactivity" 

    xmlns:ec="clr-namespace:Microsoft.Expression.Interactivity.Core;assembly=Microsoft.Expression.Interactions" 
x:Class="XXX_XXXX" 

<Button Content="My button" 
       Stretch="None" 
       HorizontalAlignment="Stretch" 
       VerticalAlignment="Top"> 

           <interactivity:Interaction.Triggers> 
       <ec:DataTrigger Binding="{Binding Check}" Value="True"> 
        <ec:ChangePropertyAction PropertyName="Visibility"> 
         <ec:ChangePropertyAction.Value> 
          <Visibility>Visible</Visibility> 
         </ec:ChangePropertyAction.Value> 
        </ec:ChangePropertyAction> 
       </ec:DataTrigger> 

       <ec:DataTrigger Binding="{Binding Check}" Value="False"> 
        <ec:ChangePropertyAction PropertyName="Visibility"> 
         <ec:ChangePropertyAction.Value> 
          <Visibility>Collapsed</Visibility> 
         </ec:ChangePropertyAction.Value> 
        </ec:ChangePropertyAction> 
       </ec:DataTrigger> 

      </interactivity:Interaction.Triggers> 
     </Button> 

注意從手機語法回答可能不正確

1

或者,你可以將此屬性添加到Detail類:

public Visibility ButtonVisibility { 
    get { 
     return this.check == true ? Visibility.Visible : Visibility.Collapsed; 
    } 
} 

然後只需將按鈕的Visibility綁定到即可屬性沒有任何轉換器。

<Button Visibility="{Binding ButtonVisibility}" /> 
相關問題