WPF ComboBox не меняет выбранный элемент - PullRequest
2 голосов
/ 22 октября 2010

Я новичок в WPF, так что, наверное, это что-то очень простое, что я забыл сделать, но не могу понять, что это такое.

У меня есть окно со списком, в котором отображаются некоторые данные, я хочу, чтобы пользователь выбрал категорию в этом списке. Это работает частично. В окне отображается поле со списком, начиная с отсутствия выбора, затем пользователь выбирает элемент, и он установлен, но если пользователь пытается перейти к другому элементу, ничего не работает, он сохраняет исходный выбранный элемент.

Вот мой код:

[Категория категории]

public class Category {
    public long CategoryId { get; set; }
    public string Name { get; set; }
    public Category MotherCategory { get; set; }
    public ICollection<Category> Categories { get; set; }
    public int Align { get; set; }
}

[ComboBox XAML]

<ComboBox Grid.Column="1" x:Name="motherCategoryComboBox" Margin="0,6,12,1"
    IsSynchronizedWithCurrentItem="True">
    <ComboBox.Resources>
        <converter:LeftMarginConverter x:Key="LeftMarginConverter" />
    </ComboBox.Resources>
    <ComboBox.ItemTemplate>
        <HierarchicalDataTemplate ItemsSource="{Binding Path=Categories}">
            <TextBlock Text="{Binding Path=Name}" Margin="{Binding Path=Align, Converter={StaticResource LeftMarginConverter}}" />
        </HierarchicalDataTemplate>
    </ComboBox.ItemTemplate>
</ComboBox>

[Файл оконного кода]

    public CategoryWindow()
    {
        InitializeComponent();

        db = new JaspeContext();
        categorieslist = db.Categories.ToList();

        motherCategoryComboBox.ItemsSource = categorieslist;

        Title = "Add category";
    }

[Конвертер]

public class LeftMarginConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        double leftMargin = double.Parse(value.ToString());

        if (leftMargin != 1)
            leftMargin = leftMargin * 9;

        return new Thickness(leftMargin, 0, 0, 0);
    }

    public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        throw new Exception("The method or operation is not implemented.");
    }
}

Нужна ваша помощь. Это сводит меня с ума!

Спасибо !!

Ответы [ 2 ]

4 голосов
/ 22 октября 2010

Надеюсь, я правильно понял ваш вопрос.Является ли ваш DataContext объектом категории?Похоже, вам нужно связать свойство SelectedItem ComboBox.Например:

<ComboBox Grid.Column="1" x:Name="motherCategoryComboBox" Margin="0,6,12,1"
IsSynchronizedWithCurrentItem="True" SelectedItem="{Binding MotherCategory , Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}">
0 голосов
/ 15 января 2012

Это не ваш случай, но так как это случилось со мной, я публикую это здесь, чтобы помочь другим людям, которые могут наткнуться на эту проблему ...

Во время обработчика событий comboBox SelectionChangeCommitted() Iдобавил следующую строку:

combobox.Text = combobox.Text.Trim();

то, что он сделал, - сбросил свойства selectedIndex и selectedText и не позволил им перейти на новое значение из-за ввода с клавиатуры или мыши.

...