<datagrid> <datatemplate> <combobox>名称不存在</combobox> </datatemplate> </datagrid>

时间:2012-03-20 23:16:12

标签: c# wpf xaml datagrid

我正在尝试在我的DataGrid中设置一个组合框,我不允许设置组合框的ItemSource(在我的.xaml.cs代码中),因为我一直收到这个错误“名字” cboChangeRequestStatus'在当前上下文中不存在。不明白为什么我可以在DataGrid的其他变体中设置它,但在我使用这个集合时却不能

<DataGridTemplateColumn Header="Status">
    <DataGridTemplateColumn.CellTemplate>
        <DataTemplate>
            <TextBlock Text="{Binding StatusCode}" />
        </DataTemplate>
    </DataGridTemplateColumn.CellTemplate>
    <DataGridTemplateColumn.CellEditingTemplate>
        <DataTemplate>
            <ComboBox   SelectedValue="{Binding Status, Mode= TwoWay}"
                        SelectedValuePath="StatusId"
                        DisplayMemberPath="StatusCode"
                        Name="cboChangeRequestStatus"/>
        </DataTemplate>
    </DataGridTemplateColumn.CellEditingTemplate>
</DataGridTemplateColumn>

2 个答案:

答案 0 :(得分:1)

你不能轻易做到这一点,你不应该这样做。

直接来自MSDN:
WPF中的样式和模板提供了以直接方式重用和重新应用内容的能力。但是,样式和模板可能还包含在模板级别定义的具有XAML名称的元素。可以在页面中多次使用相同的模板。因此,样式和模板都定义了自己的XAML名称范围,与应用样式或模板的对象树中的任何位置无关。

请参阅:WPF XAML Namescopes

如果您有类似的类:

public class Test
{
  public ObservableCollection<Status> StatusCollection { get; set; }
  public Status Status { get; set; }
}

你可以像这样使用它:

ItemsSource="{Binding Path=StatusCollection}" 
SelectedItem="{Binding Path=Status, Mode=TwoWay}"

如果集合不是动态的,请考虑为集合创建StaticResource。

答案 1 :(得分:0)

让我们说....你将ViewModel设置为你拥有DataGrid的Window的DataContext ...然后..

XAML

<DataGridTemplateColumn.CellEditingTemplate>
     <DataTemplate>
         <ComboBox   ItemsSource="{Binding Path=StatusCodes,
                                             RelativeSource={RelativeSource
                                                              Mode=FineAncestor
                                             AncetorType={x:type Window}}}"
                     SelectedValuePath="StatusId"
                     DisplayMemberPath="StatusCode"
                     Name="cboChangeRequestStatus"/>
     </DataTemplate>
 </DataGridTemplateColumn.CellEditingTemplate>