WPF Datagrid MVVM:使用DatagridTemplateColumn的组合框绑定
使用Datagridtemplatecolumn将WPFDatagrid绑定到组合框。发现很难获取组合框绑定的selectedItem。我发现了类似的例子,但这并不能解决我的问题 请在下面查找我的XAML的代码片段和数据结构:WPF Datagrid MVVM:使用DatagridTemplateColumn的组合框绑定,wpf,mvvm,wpfdatagrid,Wpf,Mvvm,Wpfdatagrid,使用Datagridtemplatecolumn将WPFDatagrid绑定到组合框。发现很难获取组合框绑定的selectedItem。我发现了类似的例子,但这并不能解决我的问题 请在下面查找我的XAML的代码片段和数据结构: public class X { public X () { abc = new ObservableCollection<P>(); } public ObservableCollection<P>
public class X
{
public X ()
{
abc = new ObservableCollection<P>();
}
public ObservableCollection<P> Y
{
get { return abc; }
set { abc = value; PropertyChanged("Y"); }
}
}
public class P
{
private string id;
private string name;
public string ID
{
get
{
return id;
}
set
{
id = value;
InvokePropertyChanged("ID");
}
}
public string Name
{
get
{
return name;
}
set
{
name = value;
InvokePropertyChanged("Name");
}
}
}
我有一个上面定义的数据结构,它实现了INotifyPropertychanged接口
<controls:DataGrid Name="datagrid" AutoGenerateColumns="False" ItemsSource="{Binding XList}" Grid.Row="0"
SelectedItem="{Binding SelectedX, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}">
<controls:DataGrid.Columns>
<controls:DataGridTemplateColumn Header="Yl">
<controls:DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<ComboBox ItemsSource="{Binding Y}"
IsSynchronizedWithCurrentItem="False" DisplayMemberPath="Name"
SelectedValue="{Binding Path=SelectedY, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged, NotifyOnTargetUpdated=True}"
SelectedValuePath="SelectedY"
SelectedItem="{Binding SelectedY, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" />
</DataTemplate>
</controls:DataGridTemplateColumn.CellTemplate>
</controls:DataGridTemplateColumn>
</controls:DataGrid.Columns>
</controls:DataGrid>
现在,在视图模型中,有一个X列表的observablecollection,即XList,它绑定到XAML中的datagrid。并将数据网格的每一行中的Y绑定到组合框。将属性设为SelectedY,绑定到组合框的SelectedItem。
还有一个属性作为SelectedX绑定到datagrid的selectedItem,这可以正常工作
Issue无法获取组合框的选定项绑定。当选择更改时,无法为组合框设置所选项目
有人能帮我设置组合框的selecteditem绑定吗?在哪里设置数据上下文? 你可以这样做:
<controls:UserControl x:Name=MainControl>
<controls:UserControl.DataContext>
<classpath:X/>
</controls:UserControl.DataContext>
<controls:DataGrid ItemsSource={Binding YourItemsContainer}>
<controls:DataGrid.Columns>
<controls:DataGridComboBoxColumn ItemsSource={Binding ElementName=MainControl,Path=DataContext.Y}
SelectedItem={Binding ElementName=MainControl,Path=DataContext.SelectedY}
DisplayMemberPath=Name />
</controls:DataGrid.Columns>
</controls:DataGrid>
</controls:UserControl>
其思想是为连接到datacontext的根元素设置一个名称,然后您可以通过路径轻松访问它的datacontext属性。当您位于模板内部时,datacontext是ItemsSource对象
希望它能对你有所帮助