<DataGrid><DataTemplate><ComboBox> имя не существует - PullRequest
1 голос
/ 21 марта 2012

Я пытаюсь установить поле со списком в моем 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 ]

1 голос
/ 21 марта 2012

Вы не можете сделать это легко, и вы не должны этого делать.

Непосредственно из 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 для коллекции, если коллекция не является динамической.

0 голосов
/ 21 марта 2012

Допустим, вы устанавливаете ViewModel в качестве DataContext окна, в котором у вас есть 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>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...