2014-10-03 35 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什么控制加载,因为您不通过myGrid作为PersistenceManager.Load()方法的参数:

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 2014-10-03 09:44:18

+0

您是否将'manager.Load(filestream);'更改为'manager.Load(myGrid,stream);'?当然,只是添加stream.Position的赋值并没有帮助。 – Marc 2014-10-03 10:18:04