2014-10-03 3 views
0

그리드에서 설정을 저장하고로드하려고합니다. 설정을 저장하면이 설정이 파일에 저장됩니다. 로드하면 설정이 다시 그리드에 배치됩니다. 데이터 만 그리드에 표시되지 않습니다. 그 이유는 무엇입니까?RadGridView의 행에있는 데이터를 어떻게 채우고 있습니까?

xaml.cs :

namespace WpfApplication1 
{ 
    /// <summary> 
    /// Interaction logic for MainWindow.xaml 
    /// </summary> 
    public partial class MainWindow : Window 
    { 
     string fileName = @"C:\temp\myFile.txt"; 
     private Stream stream; 

     public MainWindow() 
     { 
      InitializeComponent(); 
      InitializeSettings(); 
      InitializeDataContext(); 
     } 

     private void InitializeSettings() 
     { 
      using (var filestream = new FileStream(fileName, FileMode.OpenOrCreate, FileAccess.Read)) 
      { 
       PersistenceManager manager = new PersistenceManager(); 
       manager.Load(filestream); 
      } 
     } 

     private void InitializeDataContext() 
     { 
      DataContext = new ViewModel(); 
     } 

     private void Window_Closing(object sender, CancelEventArgs e) 
     { 
      PersistenceManager manager = new PersistenceManager(); 
      stream = manager.Save(myGrid); 
      using (var fileStream = new FileStream(fileName, FileMode.Create, FileAccess.Write)) 
      { 
       stream.CopyTo(fileStream); 
      } 
     } 
    } 
} 

XAML 파일 :

<Window x:Class="WpfApplication1.MainWindow" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     xmlns:telerik="http://schemas.telerik.com/2008/xaml/presentation" 
     xmlns:local="clr-namespace:WpfApplication1" 
     Title="MainWindow" 
     Height="350" 
     Width="525" 
     Closing="Window_Closing"> 
    <StackPanel x:Name="LayoutRoot"> 
     <telerik:RadGridView x:Name="myGrid" 
          IsReadOnly="False" 
          ItemsSource="{Binding Path=Afspraken, Mode=OneWay}" 
          AddingNewDataItem="myGrid_AddingNewDataItem" 
          RowEditEnded="myGrid_RowEditEnded" 
          AutoGenerateColumns="False" 
          CanUserSortColumns="True" 
          CanUserResizeColumns="True" 
          telerik:PersistenceManager.StorageId="myGrid"> 
      <telerik:RadGridView.Columns> 
       <telerik:GridViewDataColumn UniqueName="Afspraak" 
              Header="Afspraak" 
              DataMemberBinding="{Binding Path=Omschrijving, Mode=OneWay}"/> 
       <telerik:GridViewDataColumn UniqueName="Taak" 
              Header="Taak" 
              DataMemberBinding="{Binding Path=Opdracht, Mode=OneWay}"/> 
       <telerik:GridViewDataColumn UniqueName="UniqueIdea" 
              Header="Unique Idea" 
              DataMemberBinding="{Binding Path=PrimaryId, Mode=OneWay}"/> 
      </telerik:RadGridView.Columns> 
     </telerik:RadGridView> 
    </StackPanel> 
</Window> 

그리고 뷰 모델이 :

public class ViewModel : ViewModelBase 
    { 
     public ViewModel() 
     { 
      ReadData(); 
     } 

     public void ReadData() 
     { 
      afspraken.Add(new Afspraak() { Omschrijving = "Afspraak 1", Opdracht = "Opdracht 1", PrimaryId = 1 }); 
      afspraken.Add(new Afspraak() { Omschrijving = "Afspraak 2", Opdracht = "Opdracht 2", PrimaryId = 2 }); 
     } 

     private ObservableCollection<Afspraak> afspraken = new ObservableCollection<Afspraak>(); 
     public ObservableCollection<Afspraak> Afspraken 
     { 
      get { return afspraken; } 
      set 
      { 
       if (afspraken != value) 
       { 
        afspraken = value; 
        OnPropertyChanged("Afspraken"); 
       } 
      } 
     } 
    } 

답변

0

당신은로드 PersistenceManager을 제어 말하지 마 , PersistenceManager.Load() 메서드에 대한 인수로 myGrid을 전달하지 않으므로

using (var filestream = new FileStream(fileName, FileMode.OpenOrCreate, FileAccess.Read)) 
{ 
    PersistenceManager manager = new PersistenceManager(); 
    manager.Load(filestream); 
} 

Telerik documentation에서 그것이 TreeView를 들어, 다음과 같아야합니다

private void Load(object sender, RoutedEventArgs e) 
{ 
    stream.Position = 0L; 
    PersistenceManager manager = new PersistenceManager(); 
    manager.Load(treeView, stream); 
} 

을 나는 당신이 당신의 시나리오에이를 적용 할 필요가 있다고 생각합니다.

+0

충분하지 않습니다. 나는 filestream.Position = 0L를 놓았다. PersistenceManager 전에. – user1531040

+0

'manager.Load (filestream);'를'manager.Load (myGrid, stream);'로 변경 했습니까? 단지 stream.Position의 할당을 추가하는 것은 물론 도움이되지 않습니다 ... – Marc