我尝试将数据网格中的选定项绑定到某些文本框。 遗憾的是,文本框不会在更改时更新。
如果您需要更多信息可以随意询问。
在我看来,我尝试将Datagrid的所选Item的数据绑定到Textboxes。 在文本框中,可以添加要添加的新员工或要编辑的其中一个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中,我将Selected Employee的值设置为Textboxes中显示的Employee,并为两者提升事件。
public Employee SelectedEmployee
{
get { return _selectedEmployee; }
set
{
_selectedEmployee = value;
NotifyPropertyChanged("SelectedEmployee");
_employee = _selectedEmployee;
NotifyPropertyChanged("Employee");
}
}
在此之后,调试时的值是正确的。但视图不会更新。
答案 0 :(得分:1)
有一种更简单的方法可以显示DataGrid
中所选项目的值,或者实际上是WPF中的任何集合控件。那就是使用Selector.IsSynchronizedWithCurrentItem
property。如果将此项设置为true,则可以使用/
表示法从该集合中引用所选项目,这意味着当前项目。尝试这样的事情:
<StackPanel>
<DataGrid ItemsSource="{Binding Employees}" IsSynchronizedWithCurrentItem="True" />
<TextBlock Text="{Binding Employees/Name}" />
</StackPanel>
这将显示Name
中当前所选项目的DataGrid
属性值。更多信息......来自MSDN上的Binding.Path
Property页:
当源是集合视图时,可以使用斜杠(/)指定当前项。例如,子句Path = /设置绑定到视图中的当前项。当源是集合时,此语法指定默认集合视图的当前项。
可以组合属性名称和斜杠来遍历作为集合的属性。例如,Path = / Offices / ManagerName指定源集合的当前项,其中包含也是集合的Offices属性。它的当前项是包含ManagerName属性的对象。
答案 1 :(得分:0)
在我用我从nuget下载的MVVMlight替换了我自己的RelayCommand和ViewModelBase类后,它对我有用。
https://mvvmlight.codeplex.com/
我只需要使用RaisePropertyChanged更改NotifyPropertyChanged。
但也感谢@Sheridan的建议。