WPF: ComboBox ItemTemplate не применяется, пока я не выберу поле - PullRequest
0 голосов
/ 14 июня 2011

У меня есть ViewModel со свойством, которое является экземпляром класса.Когда я редактирую указанную ViewModel, у меня есть ComboBox, динамически связанный с коллекцией класса.Проблема заключается в том, что если у элемента есть экземпляр перед редактированием, шаблон ItemTemplate не будет применен, пока я не выберу и не разверну ComboBox.

Поэтому, когда я открываю всплывающее окно Edit, элемент, появляющийся в comboBox, равен myProject.myNameSpace.Typeно как только я щелкаю ComboBox, он превращается в NameOfType SomeInfo, как и должно быть.

XAML:

<ComboBox Grid.Column="1" 
      Width="Auto"
      HorizontalAlignment="Left"
      VerticalAlignment="Top"
      SelectedItem="{Binding Path=Type, Mode=TwoWay}" 
      ItemsSource="{Binding Path=AvailableTypes}"
      TextSearch.TextPath="TypeName"
      IsTextSearchEnabled="True"
      IsEditable="True" >
<ComboBox.ItemTemplate>
    <DataTemplate>
        <StackPanel Orientation="Horizontal">
            <TextBlock Margin="4"
                       Text="{Binding Path=TypeName}" />
            <TextBlock Margin="4"
                       Text="{Binding Path=TypeInfo}" />
        </StackPanel>
    </DataTemplate>
</ComboBox.ItemTemplate>
<ComboBox.GroupStyle>
    <GroupStyle>
        <GroupStyle.HeaderTemplate>
            <DataTemplate>
                <TextBlock Text="{Binding Path=Name}"
                           Foreground="Red">
                </TextBlock>
            </DataTemplate>
        </GroupStyle.HeaderTemplate>
    </GroupStyle>
</ComboBox.GroupStyle>

C #:

private ListCollectionView _availableTypes;
public ListCollectionView AvailableTypes
{
    get
    {
        if (_availableTypes == null)
        {
            _availableTypes = new ListCollectionView(Context.GetAllTypes());
            _availableTypes.GroupDescriptions.Add(new PropertyGroupDescription("Category"));
        }
        return _availableTypes;
    }
}

public TypeClass Type
{
    get { return Model.Type; }
    set
    {
        Model.Type = value;
        RaisePropertyChanged("Type");
    }
}

1 Ответ

2 голосов
/ 14 июня 2011

Невозможно воспроизвести. Может быть, потому что ваше свойство AvailableTypes возвращает _availableSections вместо _availableTypes? Если нет, пожалуйста, опубликуйте полную изолированную копию.

...