我在listview中有一个文本框,用户可以在其中编辑它,itemsource是obervablecollection。一切都运行良好,除了当用户编辑文本框的值并按下取消insted of save时,他关闭窗口并再次打开它,新值仍然应该返回到它的原始值。事实上,我直接从存储库db填充它,所以我不确定为什么它不会恢复到原始值。谁知道我的代码有什么问题?我错过了什么?感谢。
<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 :(得分:0)
我明白了。我在我的存储库中做了一些更改。 context.Refresh(RefreshMode.StoreWins,resultCollection); 解决了它。
if (null != resultCollection && resultCollection.Count() > 0)
{
//return valid single result
context.Refresh(RefreshMode.StoreWins, resultCollection);
return resultCollection;
}