使用Datagridtemplatecolumn将WPFDatagrid绑定到combobox。发现难以获得组合框绑定的selectedItem。已找到类似的例子,但这并没有解决我的问题。
请找到我的XAML的代码片段和下面的数据结构:
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 列表的集合,即 XList ,这是绑定到XAML中的datagrid。并且在绑定到Combobox的数据网格的每一行中都有 Y 。将属性设置为 SelectedY ,绑定到组合框的SelectedItem。 还有一个属性 SelectedX 绑定到datagrid的selectedItem,工作正常。
问题无法获取Combobox的Selected Item绑定。选择发生变化时,无法为组合框设置所选项目。
有人可以帮我设置组合框的selectitem绑定吗?
答案 0 :(得分:0)
在哪里设置你的datacontext? 你可以这样做:
<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对象。
希望它会对你有所帮助!