2010-05-29 54 views
0
  • 我有了一個列表框
  • 列表框(MyListBox)窗口有它的DataContext
  • ListBox的的ItemSource一個DataTable是:{結合}
  • 列表框有一個用戶控件(的MyUserControl)作爲DataTemplate中
  • 用戶控件具有單選按鈕和文本框(起初他們充滿了從數據表中的值,然後用戶可以更改它們)
  • 窗口有一個提交按鈕

我想要做的是,當用戶點擊提交按鈕WPF訪問內部列表框項目具有用戶控件的ItemTemplate中

  • 對於每一個列表框項,獲取值形成用戶控件的文本框和單選按鈕。

我是用這種方法對這項工作:

foreach(var element in MyListBox.Items) 
{ 
    var border = MyListBox.ItemContainerGenerator.ContainerFromItem(element)as FrameworkElement; 
    MyUserControl currentControl = VisualTreeHelper.GetChild(VisualTreeHelper.GetChild(VisualTreeHelper.GetChild(myBorder,0) as Border,0)as ContentPresenter,0)as MyUserControl; 
    //And use currentControl 
} 

我在列表框中使用3-5項目時實現什麼。但是當我使用更多的項目時,我發現在foreach函數中有些元素循環後,「var border」變爲「null」。

,我發現這裏的原因: ListView.ItemContainerGenerator.ContainerFromItem(item) return null after 20 items

所以,我能怎麼辦呢?我想要訪問所有項目並獲取其用戶控件的值。

感謝

回答

0

Zied的帖子是解決這個問題的方法。但我做了我的項目如下:

  • 我意識到,沒有必要在我的項目中使用UserControl作爲DataTemplate。所以我刪除了ListBox的DataTemplate。
  • 我刪除MyListBox.DataContext = myDataTable和使用這樣的:

    foreach(DataRow dr in myDataTable.Rows) 
    { 
    MyUserControl muc = new MyUserControl(dr); 
    myListBox.Items.Add(muc); 
    } 
    
  • 我帶的DataRow在我的用戶的構造,做我想要的。
  • ,最後我可以通過使用訪問列表框中的用戶控件我:
    foreach(MyUserControl muc in 
    myListBox) 
    { 
    //do what you want 
    } 
    

容易吧? :)

相關問題