У меня есть элемент управления вкладками, который имеет две вкладки.Обе вкладки имеют вид сетки и загружаются процессами 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;
}
}