重新加载后,组合框不保留所选项目

时间:2019-01-07 09:43:32

标签: c# wpf mvvm combobox

我有一个组合框,其中列出了Observablecollection中的项目。在我更改窗口之前,它可以正常工作,每次加载窗口时,组合框都还原为列表的第一项。我希望组合框即使在重新加载页面后仍保持选中状态(即转到其他窗口,然后返回第一个窗口)。 我试图保存选择的项目,并将其强加到ut组合框上,但是该组合框会自动重新加载。

public ObservableCollection<Order> AvailableOrderings { get; set; }

        <local1:ComboBox  ItemsSource="{local1:Binding AvailableOrderings}" 
            SelectedItem="{local1:Binding SelectedOrder, Mode=TwoWay,  UpdateSourceTrigger=PropertyChanged}"
            DisplayMemberPath="OrderName" HorizontalAlignment="Left" Margin="726.4,83,0,0" 
            VerticalAlignment="Top" Width="275"  SelectedIndex="0"  local1:Grid.Column="1"
            IsSynchronizedWithCurrentItem="True" Height="22" local1:Grid.Row="1"/>

ViewModel:

    public Order SelectedOrder
    {
        get
        {
            return _SelectedOrder;
        }
        set
        {
            if (_SelectedOrder != value)
            {
                _SelectedOrder = value;
                _matrixProcessor.SetOrder(_SelectedOrder.OrderName);                    
                OnPropertyChanged("SelectedOrder");
            }
        }
    }

 public ViewModelMain()
    {
//.....//
        AvailableOrderings = new ObservableCollection<Order>()
        {
        new Order(_matrixProcessor) { OrderName = "Row,Columns,Sheets" },
        new Order(_matrixProcessor) { OrderName = "Columns,Row,Sheets" },
        new Order(_matrixProcessor) { OrderName = "Sheets,Columns,Row" },
        new Order(_matrixProcessor) { OrderName = "Columns,Sheets,Row" }
        };

        //_matrixProcessor.GetSelectedOrder() is a property which keeps the user selection
         if(_matrixProcessor.GetSelectedOrder() !=null && _matrixProcessor.GetSelectedOrder() != AvailableOrderings.First())
        SelectedOrder = _matrixProcessor.GetSelectedOrder();
}

组合框每次加载页面时都从列表的第一个值开始,我希望它仅在第一次加载时显示第一项,然后保留用户选择的值。 谢谢。

0 个答案:

没有答案