2012-03-20 43 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