2009-08-20 64 views
3

我有這個組合綁定到linq表。 當我在linq表中插入一條新記錄時,是否有輕量級的方法來更新UI(顯示給用戶的組合值)?WPF數據綁定到System.Data.Linq.Table <T>,如何更新界面?

基本上從我瞭解我應該使用一個ObservableCollection,但我不希望將數據&描述了從LINQ的表複製回該集合,我只希望有在LINQ表中的數據。

這可能嗎?

編輯

確定這裏是我做了什麼(和它仍然無法正常工作):

private ObservableCollection<Categories> m_Categories; 
    private ObservableCollection<Categories> Categories 
    { 
     get 
     { 
      return m_Categories; 
     } 
    } 
在XAML

我有:

    <ComboBox Name="cmbCategory" 
          ItemsSource="{Binding Categories}" 
          DisplayMemberPath="Name" 
          SelectedValuePath="Id" 
          /> 

所以,很簡單。

 //if i have a new category, i want to update the combo's content 
     if (frmEditCategory.ShowDialog() == true) 
     { 
      //get the new category and add it to the ObservableCollection 
      LibraryDataStore.Instance.Categories.ToList().ForEach(p => 
      { 
       if (!m_Categories.Contains(p)) 
       { 
        m_Categories.Add(p); 
       } 
      }); 

      //update the target? is this correct?! 
      BindingExpression be = cmbCategory.GetBindingExpression(ComboBox.ItemsSourceProperty); 
      if (be != null) 
       be.UpdateTarget();  
     } 

通過調試器檢查,m_Categories包含新類別,但它不顯示在組合中。

而且,你知道有關組合結合任何好的教程或博客帖子?...

預先感謝您

回答

2

是不可能的你所要求的。您需要某種中介,並且您已經確定了正確的一個 - ObservableCollection。如果您希望在用戶界面發生更改時收到通知,您必須將Linq數據移到某處。您應該有一個ObservableCollection,您將您的Linq數據添加到,然後您應該將組合框綁定到ObservableCollection而不是直接綁定到表。這是您可以創建並且仍然收到自動更改通知的最簡單,最輕量級的解決方案。

+0

是的,你是正確的,現在我正在嘗試使用ObservableCollection。 – Teodor 2009-08-21 08:20:38

+0

...它的工作原理並不難實現。 – Teodor 2009-08-21 10:45:27