0

ComboBox のコンポートメントに関して問題があります。まず、コンボボックスを使用して IEnumarale 内のすべての要素を表示します。次に、ポップアップを開くボタンを使用して、ユーザーはそのリストに要素を追加できます。問題は、ユーザーが自分の選択を検証してポップアップを閉じたときに、ページを更新しないと要素が ComboBox に自動的に追加されないことです。

コンボボックスは次のようにコーディングされます:

<telerik:RadComboBox x:Name="MyElements"
                        SelectionChanged="MyElements_OnSelectionChanged" 
                        ItemTemplate="{StaticResource ComboBoxElementsTemplate}"
                        ItemsSource="{Binding ListElements}"/>

リストのコンストラクタは次のとおりです。

    public IEnumerable<Element> ListElements
    {
        get { return _listElements; }

        set
        {
            _listElements= value;
            RaisePropertyChange("ListElements");
        }
    }

そして、ポップアップでユーザーの選択を検証するためのボタンの背後にあるコード:

private ObservableCollection<HistoriqueElement> elementList = null;

private void SelectClick(object sender, RoutedEventArgs e)
    {
        var element= _GridList.SelectedItem as HistoriquePasserelle;
        if (_GridList.SelectedItem != null)
        {
            var installation = this.DataContext as Installation;
            if (installation != null && element!= null)
            {
                element.DateFin = DateTime.Now;
                HistoriqueElement newElement= new HistoriqueElement()
                {
                    Installation = installation,
                    ContactAction = GlobalActeurs.Current.CurrentContact,
                    Date = DateTime.Now,
                    Element = element.Element,
                    StatutElement = element.StatutElement ,
                    Owner= element.Owner,
                };
                elementList.Remove(element);
            }
            MainPage.ClosePopup();
        }
    }

ユーザーがポップアップのリスト表示で新しい要素を選択し、その選択を検証すると、メイン ページに戻りますが、その選択はコンボボックスに自動的に追加されません。

コードのどの部分でも投稿できます。前もって感謝します。

メソッド OnDataContextChanged :

public override void OnDataContextChanged(DependencyPropertyChangedEventArgs e)
    {
        if (e.NewValue is Installation)
        {
            if (MainPage.CurrentInstallation.LastElements != null) 
            {
                ListElements = MainPage.CurrentInstallation.LastElements;
                MyElements.SelectedIndex = 0;
            }
            else
            {
                LoadOperation<Element> operation =
                    _context.Load(_context.GetCurrentElementsByInstallationId(MainPage.CurrentInstallation.Id));
                this._busy.IsBusy = true;
                operation.Completed += delegate
                {
                    this._busy.IsBusy = false;
                    if (operation.ManageError())
                    {
                        ListElements = operation.Entities;

                    }
                };
            }
            this.DataContext = this;
        }
        else
        {
            RaisePageTitleChanged();
            if (MainPage.CurrentInstallation == null)
                return;
        }
        if (MyElements.SelectedItem == null && MyElements.Items.Any())
        {
            MyElements.SelectedIndex = 0;
        }
    }
4

2 に答える 2