2012-09-27 46 views
1

我有此XAML:的StackPanel/ItemsControl的數據綁定

<ItemsControl x:Name="recentSearches" 
       Margin="0,65,0,0"> 
       <ItemsControl.ItemsPanel> 
        <ItemsPanelTemplate> 
         <StackPanel Orientation="Horizontal" /> 
        </ItemsPanelTemplate> 
       </ItemsControl.ItemsPanel> 
       <ItemsControl.ItemTemplate> 
        <DataTemplate> 
         <TextBlock Text="{Binding q}" 
           TextWrapping="Wrap" 
           Foreground="AliceBlue" 
           Padding="2,6,2,2" 
           Margin="12,-6,12,0" 
           FontSize="20" /> 
         </DataTemplate> 
       </ItemsControl.ItemTemplate> 

和該代碼後面:

private void showLatestSearches() 
     { 
      if (fmn.checkLatestSearchesExtistence()) 
      { 
       List<RecentSearchItem> recent = new List<RecentSearchItem>(); 
       List<String> l = fmn.readLatestSearches(); 
       for (int i = 0; i <= l.Count-1; i += 1) 
       { 
        RecentSearchItem r = new RecentSearchItem(); 
        r.q = l[i]; 
        r.generalbg = grau; 
        recent.Add(r); 
       } 
       recentSearches.DataContext = recent; 
      } 
     } 

稱爲FMN對象讀取來自獨立存儲一個.txt。 但爲什麼這個StackPanel沒有任何東西顯示?

+0

您是否嘗試過運行你的應用程序,並具有http://snoopwpf.codeplex.com/ –

回答

1

ItemsControl.ItemsSource必須綁定到一個集合,通知最好是ObservableCollection<T>

您正在最後一分鐘設置DataContext,更好的方法是將 DataContext設置爲ViewModel,可以放置在您創建視圖的位置。

public class Form :UserControl 
{ 
    DataContext = new YourViewModel() ; 
} 

在XAML:

ItemsSource="{Binding SearchesCollection}" 

SearchesCollection將是ObservableCollection<string>類型的YourViewModel的屬性。每當您將新項目添加到SearchesCollection視圖更新。

This Databinding Tutorial應該有所幫助。

+0

看看我試圖做這樣的''但它仍然不起作用。 – IMX

+1

這沒有約束力。在我的回答:'ItemsSource =「{Binding SearchesCollection}」' –

+0

對不起,我的意思是'但我仍然沒有看到任何東西。它不可能綁定到一個簡單的列表? – IMX

0

由於L CWS個Therin我管理我的數據最終綁定到的StackPanel:

<ItemsControl x:Name="recentSearches" 
       ItemsSource="{Binding recent}" 
       Background="{Binding generalbg}" 
       Margin="0,65,0,0" Tap="recentSearches_Tap"> 
        <ItemsControl.ItemTemplate> 
           <DataTemplate> 
            <TextBlock Text="{Binding q}" 
               Foreground="{Binding foreground}" 
               TextWrapping="Wrap" 
               Padding="2,6,2,2" 
               Margin="12,-6,12,0" 
               FontSize="20" /> 
        </DataTemplate> 
          </ItemsControl.ItemTemplate> 
</ItemsControl> 

和後面的代碼:

private void showLatestSearches() 
{ 
    if (fmn.checkLatestSearchesExtistence()) 
    { 
     List<RecentSearchItem> recent = new List<RecentSearchItem>(); 
     List<String> l = fmn.readLatestSearches(); 
     for (int i = 0; i <= l.Count-1; i += 1) 
     { 
      RecentSearchItem r = new RecentSearchItem(); 
      r.q = l[i]; 
      r.generalbg = grau; 
      r.foreground = blau; 
      recent.Add(r); 
     } 
     recentSearches.ItemsSource = recent; 
    } 
} 

這個工作,但遺憾的是似乎沒有辦法確定當點擊一個文本框時,哪個文本框被點擊。

+0

這不是一個好方法。看看Viewmodels。你的意思是什麼? –

+0

當我點擊堆棧面板上的一個項目時,我可以爲它創建一個事件處理程序,但似乎無法知道堆棧面板中的哪個項目被點擊了。 – IMX

+0

將文本塊附加到xaml中的事件處理程序... –