GridView Загруженный через backgroundworker не отображает выбранный элемент - PullRequest
0 голосов
/ 08 марта 2012

У меня есть элемент управления вкладками, который имеет две вкладки.Обе вкладки имеют вид сетки и загружаются процессами BackgroundWorker для загрузки данных и установки свойства selectedItem.Первая вкладка, которая видна при загрузке, выбирает выбранный элемент.Когда я переключаюсь на вторую вкладку, она не отображает выбранный элемент вида сетки, даже если свойство поддержки задано правильно.Если я обошёл BackgroundWorker и загрузил текст данных в UserControl_Loaded, выбранный элемент правильно отображается на обеих вкладках.

Также, если я поменяю местами вкладки, первая вкладка всегда будет работать правильно.

Кто-нибудь знает оОбходной путь для правильного отображения выбранного элемента при настройке текстового контекста через фонового работника?

WrapperPage.xaml ----

<UserControl x:Class="CCR.CCR"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:page="clr-namespace:CCR.Pages"
Loaded="UserControl_Loaded"
>
<!-- MAIN TABS -->
<TabControl 
    Grid.Row="1"
    Margin="0 8 0 0"
    >
    <TabItem Header="First List">
        <page:FirstList/>
    </TabItem>
    <TabItem Header="Notes" IsEnabled="{Binding Notes_Enabled}">
        <page:NoteList />
    </TabItem>
</TabControl>

NoteList.xaml ----

<telerikGrid:RadGridView x:Name="NoteGrid"
                    ItemsSource="{Binding NoteList}"
                    SelectedItem="{Binding SelectedItem}"
                    IsSynchronizedWithCurrentItem="False"
                    >

NoteList_MV

public class NoteList_MV : INotifyPropertyChanging, INotifyPropertyChanged
{
    #region Constants and Variables
    BASENOTE_MV m_ModelView;
    protected ObservableCollection<SVNOTE_MVRec> m_NoteList;
    protected SVNOTE_MVRec m_SelectedItem;
    #endregion

    #region Properties
    public ObservableCollection<SVNOTE_MVRec> NoteList
    {
        get { return m_NoteList; }
        set
        {
            OnPropertyChanging("NoteList");
            m_NoteList = value;
            OnPropertyChanged("NoteList");
        }
    }

    public SVNOTE_MVRec SelectedItem
    {
        get { return m_SelectedItem; }
        set
        {
            OnPropertyChanging("SelectedItem");
            m_SelectedItem = value;
            OnPropertyChanged("SelectedItem");
        }
    }
    #endregion

    public NoteList_MV()
    {
        short bStat = 0;
        m_NoteList = new ObservableCollection<SVNOTE_MVRec>();
        m_ModelView = new SVNOTE_MV();
        m_ModelView.Open();
        if (m_ModelView.IsOpened)
        {
            string Key = sKey("SVNOTE");
            SVNOTE_MVRec tempRec = m_ModelView.LoadRec(Key, (ushort)BTROPS.B_GET_LTE, ref bStat);
            while (bStat == 0 && tempRec.AR_NUM == Key.Substring(0, 15))
            {
                AddRec(tempRec);
                tempRec = m_ModelView.LoadRec(Key, (ushort)BTROPS.B_GET_PREVIOUS, ref bStat);
            }
             m_ModelView.Close();
        }
    }
    private void AddRec(SVNOTE_MVRec tempRec)
    {
        if (tempRec.REC_TYPE.Substring(0, 2) == "N1")
        {
            m_NoteList.Add(tempRec);
            if (m_SelectedItem == null || m_SelectedItem.DISPLAY_DATE.Value < tempRec.DISPLAY_DATE.Value)
                m_SelectedItem = tempRec;
        }
    }

}

NoteList.xaml.cs

namespace CCR.Pages

{

public partial class NoteList : BaseUserControl

{
    #region Constants and Variables
    protected NoteList_MV m_ModelView;
    #endregion

    #region Methods
    public NoteList()
    {
        InitializeComponent();
        this.Loaded += new RoutedEventHandler(NoteList_Loaded);
    }

    #endregion

    #region Events
    void NoteList_Loaded(object sender, RoutedEventArgs e)
    {
        if (m_ModelView == null) wrker.RunWorkerAsync();
    }
    protected override void wrker_DoWork(object sender, DoWorkEventArgs e)
    {
        m_ModelView = new NoteList_MV();
    }
    protected override void wrker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
    {
        DataContext = m_ModelView;
        NoteGrid.IsBusy = false;
    }

}

...