У меня есть небольшая форма WPF с Listview (привязанным к наблюдаемой коллекции)
<ListView Name="Employees_Listview" ItemsSource="{Binding Employees, UpdateSourceTrigger=PropertyChanged}" SelectedItem="{Binding YourSelectedItem, Mode=TwoWay}" Height="86" IsSynchronizedWithCurrentItem="True">
<ListView.View>
<GridView>
<GridViewColumn Header="FirstName" DisplayMemberBinding="{Binding FirstName}"/>
<GridViewColumn Header="LastName" DisplayMemberBinding="{Binding LastName}"/>
</GridView>
</ListView.View>
</ListView>
2 текстовых поля
<TextBox Name="FirstName" Width="136" Text="{Binding SelectedItem.FirstName, ElementName=Employees_Listview, Mode=TwoWay}" />
<TextBox Name="LastName" Width="136" Text="{Binding SelectedItem.LastName, ElementName=Employees_Listview, Mode=TwoWay}" />
и кнопкой
<Button Command="{Binding UpdateEmployeeCommand}" Margin="0,0,10,0">Update</Button>
Оба текстовых поля привязаны к выбранному элементу в просмотре списка, поэтому при обновлении значения текстового поля оно автоматически отражает изменения в просмотре списка. Теперь я хотел бы сначала обновить базу данных, и если нет ошибки, я бы хотел обновить представление списка. Мой код обновления выглядит следующим образом
var container = ContainerConfig.Configure();
using (var scope = container.BeginLifetimeScope())
{
var SelectedEmployee = scope.Resolve<IEmployeeRepository>();
if (!SelectedEmployee.Update(YourSelectedItem))
{
MessageBox.Show("Datensatz konnte nicht aktualisiert werden!" + "\n" + "Bitte den Administrator verständigen!");
return;
};
}
Я попытался установить режим текстового поля в OneWay, но из-за того, что он привязан к SelectedItem, я не могу получить новое значение текстового поля, только «старое» значение списка просмотра,Как я могу проверить и обновить свою базу данных перед обновлением списка?
ОБНОВЛЕНИЕ Возможно, мне нужно выбрать другой подход, подобный этому: TextBox привязал новое свойство, объявленное
Просмотр
<TextBox Text="{Binding NewFirstName}" Width="123"></TextBox>
и моя ViewModel
//TEST
private string newfirstname;
public string NewFirstName
{
get { return newfirstname; }
set
{
newfirstname= value;
RaisePropertyChanged("NewFirstName");
}
}
//TEST
public EmployeeEntity YourSelectedItem
{
get
{
return _yourSelectedItem;
}
set
{
NewFirstName = value.FirstName;
_yourSelectedItem = value;
RaisePropertyChanged("YourSelectedItem");
}
}
Думаю, это не лучший путь: /