2013-04-02 3 views
1

저는 C# .net 일을 완전히 새롭게했습니다. 그러나 많은 부분을 검색 했으므로 작동 방법을 찾을 수 없습니다.DataTable을 MVVM의 DataGrid에 바인딩 WPF

나는 이런 식으로, 내보기에 데이터 그리드를 가지고 :

<DataGrid Name="SettingGrid" ItemsSource="{Binding Path=PluginSettings, Mode=OneWay, NotifyOnSourceUpdated=True, UpdateSourceTrigger=PropertyChanged}" AutoGenerateColumns="True" Margin="224.4,10,10,10"/> 

PluginSettings 동적으로 사용자가 무엇을하고 있는지에 따라 다른 컬럼 및 행으로 채워진 DataTable에있다. PluginSettings는 항상 최신 상태입니다. 디버그 모드에서 열과 행이 항상 원하는 방식으로 표시되는지 확인했습니다. 그러나 그 견해는 결코 갱신되지 않습니다. 인터넷 검색 후 DataTable을 열거 할 수 없으므로 바인딩 할 수 없습니다. 제 바인딩을 {Binding Path=PluginSettings.DefaultView으로 변경했습니다. 그걸로, 나는 완벽하게 작동하는 행을 얻지 만 열은 그렇지 않습니다.

DataTable에 열을 추가하면 뷰에 표시되지 않습니다. 그리고 DefaultView가 무엇인지 정확히 이해했다면, 사용자가 그리드에서 수행 한 변경 사항을 실제 DataTable에 복제 할 수 없다는 것을 의미합니다. 실제로는 내 목표입니다.

내가 뭔가를 놓쳤습니까? DataGrid를 사용하는 것은 나쁜 선택입니까, 내가하려는 일에 더 좋은 점이 있습니까?

희망 나는 내가 의미하는 바를 만들었다, 영어는 나의 모국어가 아니다. 감사

답변

1
  • 내가 클라이언트 측 코드 (WPF) 내에서 System.Data의 사용이 권장되지 언급해야합니다.
  • 여기에는 System.Data.DataSet, System.Data.DataTableSystem.Data 네임 스페이스 내의 다른 클래스가 포함됩니다.
  • 올바른 데이터 모델을 만들어 대신 사용해야합니다.
  • IMO, System.Data은 서버 쪽 개념이므로 클라이언트로 넘겨서는 안됩니다. 예를 들어, WinRT의
  • 은 존재하지 않습니다. System.Data이 없으므로 WPF 응용 프로그램을 WinRT로 마이그레이션하려는 경우 많은 코드를 다시 작성해야합니다.

    <Window x:Class="MiscSamples.DataGridAndDataTable" 
         xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
         xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
         Title="DataGridAndDataTable" Height="300" Width="300"> 
        <DockPanel> 
         <Button Content="Add Column" DockPanel.Dock="Top" Click="AddColumn"/> 
         <Button Content="Add Row" DockPanel.Dock="Top" Click="AddRow"/> 
         <DataGrid Name="SettingGrid" 
           ItemsSource="{Binding}" 
           AutoGenerateColumns="True"/> 
        </DockPanel> 
    </Window> 
    

    코드 뒤에 :

    public partial class DataGridAndDataTable : Window 
        { 
         public DataTable PluginSettings { get; set; } 
    
         public DataGridAndDataTable() 
         { 
          InitializeComponent(); 
    
          PluginSettings = new DataTable(); 
    
          PluginSettings.Columns.Add("Name", typeof (string)); 
          PluginSettings.Columns.Add("Date", typeof(DateTime)); 
    
          PluginSettings.NewRow(); 
          PluginSettings.NewRow(); 
    
          PluginSettings.Rows.Add("Name01", DateTime.Now); 
    
          DataContext = PluginSettings; 
         } 
    
         private void AddColumn(object sender, RoutedEventArgs e) 
         { 
          PluginSettings.Columns.Add("Age", typeof (int)); 
          DataContext = null; 
          DataContext = PluginSettings; 
         } 
    
         private void AddRow(object sender, RoutedEventArgs e) 
         { 
          PluginSettings.Rows.Add("Name01", DateTime.Now); 
         } 
        } 
    

이 예제는 모두 새 행을 추가하고 추가 새 열에서 작동, 그런 말로 미루어 보아,