2009-08-20 62 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