[英]Adding a Combobox to a DataGrid in Silverlight
我可以使用以下xmal将组合框添加到DataGrid:
<local:DataGridTemplateColumn Header="SomeHeader" Width="106" HeaderStyle="{StaticResource headerAlignRightStyle}" CellStyle="{StaticResource cellAlignRightStyle}">
<local:DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBlock Text="{Binding SomeProp}" Margin="4"/>
</DataTemplate>
</local:DataGridTemplateColumn.CellTemplate>
<local:DataGridTemplateColumn.CellEditingTemplate>
<DataTemplate>
<ComboBox
x:Name="SomeCombo"
SelectionChanged="SomeCombo_SelectionChanged"
ItemsSource="{Binding SomeList}"
DisplayMemberPath="Name"
/>
</DataTemplate>
</local:DataGridTemplateColumn.CellEditingTemplate>
</local:DataGridTemplateColumn>
但是我不知道是一种明智的方法来获取被combox绑定的行。 即当处理组合框SelectionChanged事件时,我无法知道组合框属于哪一行。 特别是我不知道组合框所指的是DataGrid数据源中的哪个对象。
任何帮助将非常感激。
你可以
A)使用双向绑定将ComboBox的SelectedItem属性绑定到ViewModel /数据模型中的属性,因此您不必首先担心SelectionChanged
要么
B)在SelectionChanged处理函数中使用DataGridRow.GetRowContainingElement(element),即
private void SomeCombo_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
var comboBox = sender as ComboBox;
if (comboBox == null)
return;
var row = DataGridRow.GetRowContainingElement(comboBox);
// Do something with row...
}
干杯,亚历克斯
如果您只是想获取该行绑定的项目,则可以读取发送者的DataContext:
private void SomeCombo_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
var item = sender as FrameworkElement;
if (item== null)
return;
var source = item.DataContext;
}
据我了解,当您单击组合框时,该行应获得焦点。 这也意味着数据网格知道所选项目。
如果要查找选定的对象,则应该使用datagridName.SelectedItem
对其进行访问。 这将返回所选对象。
请对其进行测试,并对解决方案发表评论,因为我现在无法检查答案。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.