2010-06-06 3 views
0

표면 SDK를 사용하여 개발 된 두 개의 WPF 창이 있는데, 하나는 데이터 입력 양식이고 두 번째는 목록 상자에 데이터를 표시합니다. 목록 상자는 데이터를 완벽하게 표시하지만 데이터 입력 양식을 사용하여 새 레코드를 추가하면 창을 다시 열 때까지 목록 상자가 업데이트되지 않습니다. 바인딩 또는 뭔가를 통해 목록 상자를 자동으로 업데이트하는 방법이 있습니까? 나는이 목록 상자를 채우려면 비주얼 C# 2008 코드를 사용하고WPF : 목록 상자를 자동으로 업데이트합니다. C#

<s:SurfaceListBox Height="673" Margin="0,26,0,31" Name="surfaceListBox1" ItemsSource="{Binding Path={}}" Width="490"> 
     <s:SurfaceListBox.ItemTemplate> 
      <DataTemplate> 
       <StackPanel Orientation="Horizontal"> 
        <Label Width="80" FontSize="8" Content="{Binding Path=item1}"></Label> 
        <Label Width="80" FontSize="8" Content="{Binding Path=item2}"></Label> 
        <Label Width="210" FontSize="8" Content="{Binding Path=item3}"></Label> 
        <Label Width="80" FontSize="8" Content="{Binding Path=item4}"></Label> 
        <Label Width="60" FontSize="8" Content="{Binding Path=item5, Converter={StaticResource booleanconverter}}"></Label> 
       </StackPanel> 
      </DataTemplate> 
     </s:SurfaceListBox.ItemTemplate> 
    </s:SurfaceListBox> 

: 내 데이터베이스의 유일한 테이블이 메인 화면이라고

private SHIPS_LOGDataSet ShipData = new SHIPS_LOGDataSet(); 
    private SHIPS_LOGDataSetTableAdapters.MAINTableAdapter taMain = new SHIPS_LOGDataSetTableAdapters.MAINTableAdapter(); 
    private SHIPS_LOGDataSetTableAdapters.TableAdapterManager taManager = new ShipsLogSurface.SHIPS_LOGDataSetTableAdapters.TableAdapterManager(); 

    private void SurfaceWindow_Loaded(object sender, RoutedEventArgs e) 
    { 
     this.taMain.Fill(this.ShipData.MAIN); 
     this.DataContext = from MAIN in this.ShipData.MAIN orderby MAIN.MESSAGE_ID descending select MAIN; 

    } 

은 목록 상자 코드입니다.

나는 콜렉션 뷰 또는 유사한 것을 사용해야 할 수도 있지만 그것을 구현하는 방법을 모르겠다 고 생각합니다. 어떤 아이디어라도 높이 평가할 수 있습니다. 감사합니다

답변

1

INotifyPropertyChanged로 해보십시오.

+0

고맙습니다. 저는 C#과 WPF가 아직 새롭기 때문에 INotifyPropertyChanged를 구현하는 새로운 클래스를 만들겠습니까? 목록 상자를 데이터베이스에 연결하는 데 어떻게 사용합니까? – Ashley

+0

목록 상자를 데이터베이스에 연결하는 것에 관한 질문; 동일한 데이터 클래스에 데이터베이스와 상호 작용하고 데이터 클래스의 속성을 업데이트하여 (OnPropertyChanged가 실행되는) 만들기/업데이트/삭제/목록 메서드를 가질 수 있습니다. –

3

INotifyPropertyChanged는 데이터 클래스 (ShipData?)에서 구현해야하는 인터페이스입니다. 다음과 같이 데이터 클래스의 속성과 같아야합니다

private string _myField; 
public string MyField { 
    get { return _myField; } 
    set { _myField = value; onPropertyChanged(this, "MyField"); } 
} 

그래서 데이터 클래스 변경에 뭔가가 (즉/업데이트를 추가/삭제)는 OnPropertyChanged를 이벤트가 발생 할 때마다. 목록을 채우는 데 사용하는 목록 또는 ObservableCollection은이 OnPropertyChanged 이벤트를 수신하고 이벤트가 발생할 때마다 자체적으로 업데이트됩니다.

관련 문제