2014-02-14 111 views
0

我有在它的多個項目,如TextBlock的,圖像等列表中...更改列表框項目可見

現在在XAML文件中所有項目的知名度將根據條件倒塌,在我.CS文件我決定要顯示哪個項目,因爲我需要僅顯示TextBlock或Image,但由於默認情況下所有項目的可見性都已摺疊,因此如何動態更改ListBoxItems可見性並將數據或圖像設置爲項目?

這裏是我的XAML代碼:

<ListBox Name="listBox" 
     HorizontalContentAlignment="Stretch" 
     VerticalContentAlignment="Stretch" 
     SelectionChanged="TopicListboxSelectionChanged" 
     ScrollViewer.VerticalScrollBarVisibility="Disabled"> 
     <ListBox.ItemTemplate> 
        <DataTemplate> 
         <StackPanel Name="CellBack" Margin="0,0,0,4" Orientation="Horizontal"> 
          <Border Name="borderColor" Background="#FFF2F4F7"> 
           <TextBlock Name="text" 
             Width="456" 
             Padding="10,20,10,20" 
             Visibility="Collapsed" 
             TextAlignment="Center" 
             Text="{Binding Path=Value}" 
             Style="{StaticResource TextStyle}"/> 
          </Border> 
           <Image Name="Image" 
             Grid.Row="0" 
             Visibility="Collapsed" 
             Width="Auto" 
             Height="Auto" 
             HorizontalAlignment="Center" 
             VerticalAlignment="Center" 
             Margin="1,1,1,1"/> 
         </StackPanel> 
        </DataTemplate> 
       </ListBox.ItemTemplate> 

編輯

我paht在我.CS文件中的圖像源是這樣的:

image = "Path to my soucre" + imagename +"phone.png"; 

現在,在中XAML文件中的圖像如何將此路徑綁定到它?

通常我們做這樣的:

BitmapImage bmp = new BitmapImage(new Uri(fileName, UriKind.Relative)); 
       MyImage.Source = bmp; 

這裏MYIMAGE是在XAML文件映像的名稱,但在我的情況下,我不能讓圖像名稱是在列表框中,所以現在如何綁定數據?

+0

你如何決定哪個控件是可見的,是否有'Data'與'DataContext'這個? – Sankarann

+0

我有一個對象,我可以檢查是否包含圖像或文本基於我必須使文本塊或圖像顯示或顯示在屏幕上,但如何做到這一點? – Goofy

+0

你的'對象'出現在哪裏?在'ListItem'的'DataContext'中? – Sankarann

回答

3

只需將屬性TextVisiblityImageVisibility添加到您的視圖模型中即可。然後直接與他們:

<DataTemplate> 
    <StackPanel> 
     <TextBlock Visibility="{Binding TextVisibility}" ... /> 
     <Image Visibility="{Binding ImageVisibility}" ... /> 
    </StackPanel> 
</DataTemplate> 

的屬性可以是隻讀的,如例如:

public Visibility TextVisibility 
{ 
    get { return Value == null ? Visibility.Collapsed : Visibility.Visible; } 
} 

另外,如果你不想修改模型類,您可以使用IValueConverter,如:

<TextBlock Visibility="{Binding Converter={StaticResource ModelToTextVisibility}" ... /> 

(爲此,你不得不寫ModelToTextVisibility類,SE e here查看完整的示例。)

+0

好吧,你的意思是說我需要在我的課堂中添加gettersetter方法,並將可見性設置爲我的文本?這是這樣嗎?但是我如何在這裏設置可視性?我很困惑可以請你詳細說明 – Goofy

+0

@Goofy是的,理想情況。 – McGarnagle

+0

好吧,讓我試試一次,我會回到你 – Goofy

1

這就是我如何獲得代碼中的列表框項目。

ListBoxItem lbi = listBox.ItemContainerGenerator.ContainerFromIndex(listBox.SelectedIndex) as ListBoxItem; 

這就是我如何使它看不見。

lbi.Visibility = Visibility.Collapsed; 
+0

請檢查我的編輯 – Goofy

+0

好吧,這意味着你需要訪問列表框中的項目DataTemplate中。檢查此鏈接-http://developer.nokia.com/community/wiki/How_to_find_a_specific_element_inside_a_control_using_Visual_tree_in_WP7 ...它描述了同樣的問題。 –