c# – 无法在另一个Datagrid的RowDetailsTemplate内跟踪DataGrid
我今天早些时候遇到了这个问题,无法找到解决方案.当我在RowDetailsTemplate内部的DataGrid中选择一行时,不会设置另一个DataGrid的RowDetailsTemplate内的DataGrid的SelectedItem. (很难解释清楚.)
绑定都适用于列表. MainViewModel包含一个MyItem对象的ObservableCollection,这是外部DataGrid绑定的内容. MyItem对象包含一个MyItem2对象的ObservableCollection,它们被正确绑定到内部DataGrid. MyItem对象还有一个名为SelectedItem2的属性,它应该绑定到内部DataGrid的SelectedItem,但永远不会被设置. 顺便说一句:我正在使用VS2012和.Net 4.5. 例: MainWindow.xaml <Window x:Class="WpfApplication1.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:wpfApplication1="clr-namespace:WpfApplication1" Title="MainWindow" Height="350" Width="525"> <Window.Resources> <wpfApplication1:MainWindowViewModel x:Key="MainVm"/> </Window.Resources> <Grid DataContext="{StaticResource MainVm}"> <DataGrid AutoGenerateColumns="False" ItemsSource="{Binding Path=MyItem1s}"> <DataGrid.Columns> <DataGridTextColumn Header="Name" Width="*" Binding="{Binding Path=Name}"/> </DataGrid.Columns> <DataGrid.RowDetailsTemplate> <DataTemplate> <DataGrid AutoGenerateColumns="False" ItemsSource="{Binding Path=Item2s}" SelectedItem="{Binding Path=SelectedItem2}"> <DataGrid.Columns> <DataGridTextColumn Header="Item 2 Name" Width="130" Binding="{Binding Path=Name}"/> </DataGrid.Columns> </DataGrid> </DataTemplate> </DataGrid.RowDetailsTemplate> </DataGrid> </Grid> MainWindowViewModel public class MainWindowViewModel : ViewModelBase { public MainWindowViewModel() { for (int i = 0; i < 10; i++) { var item1 = new MyItem1(); item1.Name = i.ToString(); for (int j = 11; j < 20; j++) item1.Item2s.Add(new MyItem2() { Name = j.ToString() }); MyItem1s.Add(item1); } } private ObservableCollection<MyItem1> _myItem1S = new ObservableCollection<MyItem1>(); public ObservableCollection<MyItem1> MyItem1s { get { return _myItem1S; } set { _myItem1S = value; } } } MyItems ViewModels public class MyItem1 : ViewModelBase { private string _name; public string Name { get { return _name; } set { _name = value; OnPropertyChanged("Name"); } } private ObservableCollection<MyItem2> _item2S = new ObservableCollection<MyItem2>(); public ObservableCollection<MyItem2> Item2s { get { return _item2S; } set { _item2S = value; OnPropertyChanged("Item2s"); } } private MyItem2 _selectedItem2; public MyItem2 SelectedItem2 { get { return _selectedItem2; } set { _selectedItem2 = value; OnPropertyChanged("SelectedItem2"); } } } public class MyItem2 : ViewModelBase { private string _name; public string Name { get { return _name; } set { _name = value; OnPropertyChanged("Name"); } } } ViewModelBase public class ViewModelBase : INotifyPropertyChanged { public event PropertyChangedEventHandler PropertyChanged; public void OnPropertyChanged(string property) { if(PropertyChanged != null) PropertyChanged(this,new PropertyChangedEventArgs(property)); } } 任何帮助,将不胜感激. 谢谢! 解决方法
啊,这很简单,你没有利用你的onpropertychanged
在您的datatemplate上试试这个 <DataTemplate DataType="{x:Type wpfApplication1:MyItem1}"> <DataGrid AutoGenerateColumns="False" ItemsSource="{Binding Item2s}" SelectedItem="{Binding Path=SelectedItem2,UpdateSourceTrigger=PropertyChanged}"> …… 你需要updatesourcetrigger,我只是为你的一个绑定设置代码但是你需要在你计划使用propertychanged更新值的地方完成 我通常使用依赖项属性,因此您不需要这样做,但是对依赖项属性进行一些研究并且无法更改,您可以找到所需的属性. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |