【发布时间】:2019-10-14 10:41:07
【问题描述】:
我有一个小的 WPF 表单,其中包含 Listview(绑定到 observablecolletion)
<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");
}
}
猜这不是最好的方法:/
【问题讨论】:
-
您是说
ListView更新但TextBox值不更新? -
不,它工作正常(单击 ListView 项目 --> FirstName 和 LastName 根据选择填写 - 立即 --> 更新 textBox 中的文本 --> ListView 立即更新)。我想要做的是在我更新我的数据库之后更新源(ObservableCollection),所以如果出现错误,我可以坚持使用旧值。不幸的是,我的文本框直接绑定到我的 ListView,所以我想我必须创建一个新属性(请参阅我更新的问题)