일반적으로 ObservableCollection에 바인드하는 것과 같은 방법으로 목록 상자의 항목 소스를 Linq 테이블에 바인딩하려고합니다.올바르게 바인딩 목록 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 일 동안 검색을했는데 해결 방법이나 비슷한 질문이 없습니다. 아마도 잘못된 쿼리를 사용하고있을 것입니다.
요약하면, 테이블을 목록에 바인딩하는 정확한 방법을 알고 싶습니다. 항목을 제거하거나 추가 할 때 업데이트하는 것과 그 좋은 것들을 모두 업데이트하고 싶습니다. 나는 7.1