2013-06-24 40 views
1

我試圖將一個列表框的項目源綁定到一個Linq表,就像你通常將一個ObservableCollection綁定到它一樣。正確綁定列表ItemsSource到Linq表

我希望我的列表可以在刪除,添加和更改項目時使用表進行更新。

我已經在表所包含的類上實現了INotifyPropertyChanged。這使列表更新我的項目包含的屬性,但是,爲了在添加或刪除項目時更新列表,我必須以編程方式重新綁定ItemsSource以強制更新列表。

數據上下文

public class LocalDatabase : DataContext 
{ 
    public static string connectionString = "Data Source=isostore:/Database.sdf"; 

    public LocalDatabase() : base(connectionString) { } 

    public Table<Connection> Connections; 
} 

表對象

[Table] 
public class Connection : INotifyPropertyChanged 
{ 
    private string name; 
    private string ip; 
    private ushort port; 

    [Column(IsPrimaryKey=true, IsDbGenerated=true)] 
    public int ID { get; set; } 
    [Column] 
    public string Name { get { return name; } set { name = value; NotifyPropertyChanged("Name"); } } 
    [Column] 
    public string IP { get { return ip; } set { ip = value; NotifyPropertyChanged("IP"); } } 
    [Column] 
    public ushort Port { get { return port; } set { port = value; NotifyPropertyChanged("Port"); } } 

    public event PropertyChangedEventHandler PropertyChanged; 
    private void NotifyPropertyChanged(String propertyName) 
    { 
     PropertyChangedEventHandler handler = PropertyChanged; 
     if (null != handler) 
     { 
      handler(this, new PropertyChangedEventArgs(propertyName)); 
     } 
    } 
} 

目標列表

 <ListBox Name="listBoxConnections" SelectionChanged="listBoxConnections_SelectionChanged"> 
      <ListBox.ItemTemplate> 
       <DataTemplate> 
        <StackPanel Margin="0,0,0,17" Width="432" Height="78"> 
         <toolkit:ContextMenuService.ContextMenu> 
          <toolkit:ContextMenu> 
           <toolkit:MenuItem Header="Edit" Click="ConnectionEdit" Tag="{Binding ID}" /> 
           <toolkit:MenuItem Header="Delete" Click="ConnectionDelete" Tag="{Binding ID}" /> 
          </toolkit:ContextMenu> 
         </toolkit:ContextMenuService.ContextMenu> 
         <TextBlock Text="{Binding Name}" TextWrapping="Wrap" Style="{StaticResource PhoneTextExtraLargeStyle}"/> 
         <StackPanel Orientation="Horizontal" Margin="12,-6,12,0"> 
          <TextBlock Text="{Binding IP}" Style="{StaticResource PhoneTextSubtleStyle}" Margin="0" /> 
          <TextBlock Text=":" Margin="2,0,2,0" /> 
          <TextBlock Text="{Binding Port}" Style="{StaticResource PhoneTextSubtleStyle}" Margin="0" /> 
         </StackPanel> 
        </StackPanel> 
       </DataTemplate> 
      </ListBox.ItemTemplate> 
     </ListBox> 

當前綁定方法

public LocalDatabase Database { get; set; } 

    public MainPage() 
    { 
     InitializeComponent(); 

     Database = new LocalDatabase(); 
     if (!Database.DatabaseExists()) Database.CreateDatabase(); 

     listBoxConnections.ItemsSource = Database.Connections; 
     DataContext = this; 
    } 

恐怕可能有重複的地方,但我一直在尋找最後2天,並沒有找到解決方案或類似的問題。可能使用錯誤的查詢。

因此,總之,我想知道將表綁定到列表的正確方法,通過它在項目刪除或添加時更新以及所有這些好東西。

我隨着Windows Phone 7.1的工作

回答