2011-07-29 230 views
0

我有一个列表视图内的用户可以编辑它的文本框,itemsource是obervablecollection。除了当用户编辑文本框的值并按下取消保存以及关闭窗口并再次打开窗口时,一切都运行良好,当新值返回到原始值时,新值仍保持不变。事实上,我直接从存储库数据库填充它,所以我不知道它为什么不恢复到原来的价值。任何人都知道我的代码有什么问题?我错过了什么?谢谢。ListView文本框的值将不会恢复到原始值,即使没有保存在数据库中

<ListView Name="lvNeutralEduc" Grid.Column="0" Grid.Row="0" BorderBrush="Transparent" Height="Auto" MaxHeight="300" ScrollViewer.HorizontalScrollBarVisibility="Auto"> 
        <ListView.View> 
         <GridView> 
          <GridView.Columns> 
           <GridViewColumn Header="Family Law Course" Width="Auto" > 
            <GridViewColumn.CellTemplate> 
             <DataTemplate> 
              <CheckBox IsChecked="{Binding Path=IsFamilyLawCourse}" HorizontalAlignment="Center" Checked="CheckBox_Checked" Unchecked="CheckBox_Checked" /> 
             </DataTemplate> 
            </GridViewColumn.CellTemplate> 
           </GridViewColumn> 
           <GridViewColumn Header="Course Title" Width="200" > 
            <GridViewColumn.CellTemplate> 
             <DataTemplate> 
              <TextBox Text="{Binding Path=ContinuingType, Mode=TwoWay}" Width="200" TextChanged="TextBox_TextChanged" /> 
             </DataTemplate> 
            </GridViewColumn.CellTemplate> 
           </GridViewColumn> 
           <GridViewColumn Header="Course Date" Width="110"> 
            <GridViewColumn.CellTemplate> 
             <DataTemplate> 
              <useable:MaskedDatePicker DateValue="{Binding Path=CourseDate, Mode=TwoWay}" Width="110" PreviewTextInput="MaskedDatePicker_PreviewTextInput" GotFocus="MaskedDatePicker_GotFocus" /> 
             </DataTemplate> 
            </GridViewColumn.CellTemplate> 
           </GridViewColumn> 
           <GridViewColumn Header="Course Expiration" Width="110"> 
            <GridViewColumn.CellTemplate> 
             <DataTemplate> 
              <useable:MaskedDatePicker DateValue="{Binding Path=CourseExpiration, Mode=TwoWay}" Width="110" PreviewTextInput="MaskedDatePicker_PreviewTextInput"/> 
             </DataTemplate> 
            </GridViewColumn.CellTemplate> 
           </GridViewColumn> 
          </GridView.Columns> 
         </GridView> 
        </ListView.View> 
       </ListView> 

后面的代码:

public ObservableCollection<tblContinuingEducationHistory> EducNeutralList 
    { 
     get { return _educNeutrallist; } 
     set 
     { 
      if (_educNeutrallist != value) 
      { 
       _educNeutrallist = value; 
       OnPropertyChanged("EducNeutralList"); 
      } 
     } 
    } 
//constructor 
public NeutralContinuingEducHistory(tblNeutralFileMaint currentNeutralFM) 
    { 
     isAttyGal = false; 
     OtherCmdText = "Print Report"; 
     PrintCmdVisibility = Visibility.Visible; 
     OtherCmdVisibility = Visibility.Collapsed; 
     AttyGALFormVisibility = Visibility.Collapsed; 
     ToggleVisibility(); 

     InitializeComponent(); 

     if (currentNeutralFM != null) 
     { 

      CurrentNeutralFM = currentNeutralFM; 
      txtMemberName.Text = CurrentNeutralFM.FullName; 
      var items = FileMaintenanceBusiness.Instance.GetManyNeutralFMContEducHistoryInfobyKeyword(currentNeutralFM.NeutralID, "NeutralID");//FileMaintenanceBusiness.Instance.GetManyNeutralFMContEducHistoryInfobyKeyword(currentNeutralFM.NeutralID, "NeutralID")!=null ? FileMaintenanceBusiness.Instance.GetManyNeutralFMContEducHistoryInfobyKeyword(currentNeutralFM.NeutralID, "NeutralID") : null);//currentNeutralFM.tblContinuingEducationHistories); 
      EducNeutralList = items != null ? new ObservableCollection<tblContinuingEducationHistory>(items) : new ObservableCollection<tblContinuingEducationHistory>(CurrentNeutralFM.tblContinuingEducationHistories); 
      countOrig = EducNeutralList != null ? EducNeutralList.Count : 0; 
      lvNeutralEduc.ItemsSource = EducNeutralList; 
     } 

     this.DataContext = this; 
    } 

业务层中填充get方法:

public IList<tblContinuingEducationHistory> GetManyNeutralFMContEducHistoryInfobyKeyword(string keyword, string by) 
    { 
     try 
     { 
      return _continuingEducationHistoryRepository.SelectManyByColumnKeyword(keyword, by); 
     } 
     catch (Exception ex) 
     { 

     } 
     return null; 
    } 

库为EF:

public IList<TEntity> SelectManyByColumnKeyword(string Key, string columnName) 
    { 

     // First we define the parameter that we are going to use the clause. 
     var xParam = Expression.Parameter(typeof(TEntity), typeof(TEntity).Name); 
     MemberExpression leftExpr = MemberExpression.Property(xParam, columnName); 
     Expression rightExpr = Expression.Constant(Key); 
     BinaryExpression binaryExpr = MemberExpression.Equal(leftExpr, rightExpr); 
     //Create Lambda Expression for the selection 
     Expression<Func<TEntity, bool>> lambdaExpr = 
     Expression.Lambda<Func<TEntity, bool>>(binaryExpr, 
     new ParameterExpression[] { xParam, }); 
     //Searching .... 
     IList<TEntity> resultCollection = ((IADRRepository<TEntity, TContext>)this).SelectAll 
        (new Specification<TEntity>(lambdaExpr)); 
     if (null != resultCollection && resultCollection.Count() > 0) 
     { 
      //return valid single result 
      return resultCollection; 
     }//end if 
     return null; 
    } 
+0

有人吗?已经停留了好几天了...不能找到解决方案:( – user742102

回答

0

我想通了。我在存储库中进行了一些更改。 context.Refresh(RefreshMode.StoreWins,resultCollection);解决了它。

if (null != resultCollection && resultCollection.Count() > 0) 
     { 
      //return valid single result 
      context.Refresh(RefreshMode.StoreWins, resultCollection); 
      return resultCollection; 
     } 
相关问题