Listview textbox value won't revert to original value even not saved in DB
I have a textbox inside a listview in which user can edit it, itemsource is obervablecollection. Everything is working well except that when user edits the value of textbox and pressed cancel insted of save, and he closes the window and opens it again, the new value remains when it should go back to it's orginal value. Infact, I am populating it directly from repository db so I am not sure why it is not reverting back to original value. Anyone knows what is wrong with my code? WHat am I missing? thanks.
<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>
Code behind:
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;
}
Business layer in populating the get method:
public IList<tblContinuingEducationHistory> GetManyNeutralFMContEducHistoryInfobyKeyword(string keyword, string by)
{
try
{
return _continuingEducationHistoryRepository.SelectManyByColumnKeyword(keyword, by);
}
catch (Exception ex)
{
}
return null;
}
Repository for 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;
}
I figured it out. I made some changes in my repository. context.Refresh(RefreshMode.StoreWins, resultCollection); solved it.
if (null != resultCollection && resultCollection.Count() > 0)
{
//return valid single result
context.Refresh(RefreshMode.StoreWins, resultCollection);
return resultCollection;
}
精彩评论