WPF Combobox с SelectedValue ведет себя странно - PullRequest
0 голосов
/ 31 августа 2018

У меня есть ComboBox, который содержит определенное количество лет. Однако у меня возникли проблемы с элементом, который следует выбрать.

XAML

 <ComboBox MaxDropDownHeight="90" Height="10" Width="80" ItemsSource="{Binding accy}"  DisplayMemberPath="DisplayMember" SelectedValuePath="ValuePath" SelectedValue="{Binding Accy_selected}"/>

MainWindow.cs

 public MainWindow()
    {
        InitializeComponent();           
        this.DataContext = new Test();}

Test.cs

class Test
{
    public ObservableCollection<ComboYear> accy { get; set; }
    private string _accy_selected = "";

    public Test()
    {
        int min = 1940;
        int max = 2040;
        accy = new ObservableCollection<ComboYear>();                                    
            for (int i = min; i < max; i++)
            {
                accy.Add(new ComboYear { DisplayMember = Convert.ToString(i), ValuePath = Convert.ToString(i) });
            }
            Accy_selected = Convert.ToString(max);                     
    }

        public class ComboYear
        {
            public string DisplayMember { get; set; }
            public string ValuePath { get; set; }
        }       

    public string Accy_selected
    {
        get { return _accy_selected; }
        set
        {
            if (value != _accy_selected)
            {
                _accy_selected = value;
                NotifyPropertyChanged("Accy_selected");
            }

        }
    }

ComboBox заполняется, но элемент не выбран. Странная часть об этом, если я изменю эту строку

Accy_selected = Convert.ToString(max);

к этому это работает. Это работает на каждый год в ComboBox. Я слишком глуп, чтобы преобразовать int в string?

Accy_selected = "2039";

Понятия не имею, как это исправить

1 Ответ

0 голосов
/ 31 августа 2018

max (2040) не входит в ComboBox, не так ли? Вы выполняете итерацию, пока переменная счетчика i равна меньше max:

for (int i = min; i < max; i++)

Если вы измените условие на i <= max, значение "2040" должно быть включено и выбрано, когда вы устанавливаете свойство Accy_selected следующим образом:

Accy_selected = Convert.ToString(max);
...