2012-03-20 40 views
1

我想在我的DataGrid中设置组合框,并且我不允许设置组合框的ItemSource(在我的.xaml.cs代码中),因为我不断收到此错误“‘cboChangeRequestStatus’这个名字在目前情况下不存在。不明白为什么我可以设置这个DataGrid中的其他变化,但可以当我使用没有这个设置<DataGrid><DataTemplate><ComboBox>名称不存在

<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> 

回答

1

你不能这样做这很容易,你不应该这样做。

直接从MSDN:
样式a 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}" 

或者考虑如果集合创建静态资源收集不是动态的。

0

比方说....要设置视图模型中,你有你的DataGrid ...然后..

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> 
窗口的DataContext