【发布时间】:2014-07-03 08:36:53
【问题描述】:
我尝试将我的数据网格中的选定项目绑定到一些文本框。 遗憾的是,文本框不会在更改时更新。
如果您需要更多信息,请随时询问。
在我看来,我尝试将 Datagrid 的选定项的数据绑定到文本框。 在文本框中,可以有您要添加的新员工或您要编辑的 Datagrid 之一。
<TextBox Name="TxtName" Text="{Binding Employee.LastName}" Grid.Column="1" Grid.Row="0"></TextBox>
<TextBox Name="TxtFirstName" Text="{Binding Employee.FirstName}" Grid.Column="3" Grid.Row="0"></TextBox>
<TextBox Name="TxtDateOfBirth" Text="{Binding Employee.DateOfBirth, StringFormat=d}" Grid.Column="1" Grid.Row="1"></TextBox>
<ComboBox Name="CmbGender" SelectedItem="{Binding Employee.Gender}" ItemsSource="{Binding Genders}" DisplayMemberPath="Short" Grid.Column="3" Grid.Row="1"/>
<DataGrid Name="GrdAllEmployees" ItemsSource="{Binding Employees}" SelectedItem="{Binding SelectedEmployee}" Grid.Column="0" Grid.Row="3" Grid.ColumnSpan="4" CanUserReorderColumns="False" CanUserResizeColumns="False" CanUserResizeRows="False" CanUserSortColumns="False">
<i:Interaction.Triggers>
<i:EventTrigger EventName="SelectionChanged">
<i:InvokeCommandAction Command="{Binding SelectionChanged}"/>
</i:EventTrigger>
</i:Interaction.Triggers>
</DataGrid>
在我的 ViewModel 中,我将所选员工的值设置为文本框中显示的员工,并为两者引发事件。
public Employee SelectedEmployee
{
get { return _selectedEmployee; }
set
{
_selectedEmployee = value;
NotifyPropertyChanged("SelectedEmployee");
_employee = _selectedEmployee;
NotifyPropertyChanged("Employee");
}
}
在此之后,这些值在调试时是正确的。但视图不会更新。
【问题讨论】:
-
所以
SelectedEmployeesetter 会在您更改DataGrid中的选定项目时触发? -
改善您的问题并让人们阅读它的好方法(它实际上可能会帮助您自己解决问题)是尽可能多地删除代码,直到删除更多代码不会重现问题并且只有这样,发布它。
-
@Boot750 还要确保在绑定
SelectedEmployee时设置了哪个值,这会更新Employee属性,并触发SelectionChanged命令,该命令也执行Employee = _selectedEmployee; -
@dkozl 1. 是的,如果我更改选择,则会触发 SelecteEmplyee 触发器。 2. 两个部分都设置了相同的值,所以我可以删除其中一个。现在我在 SelectionChange 方法中删除了。价值观在课堂上是正确的。但它不会更新文本框。感谢您的快速回复。
-
@franssu 对不起,下次我会做得更好