Я настроил вкладку типа окна wpf для переключения между моделями просмотра. Главное окно выглядит следующим образом.
<Window.Resources>
<DataTemplate DataType="{x:Type skyTelescope:SkyTelescopeVM}">
<skyTelescope:SkyTelescopeV />
</DataTemplate>
<DataTemplate DataType="{x:Type charting:ChartingVM}">
<charting:ChartingV />
</DataTemplate>
<DataTemplate DataType="{x:Type focuser:FocuserVM}">
<focuser:FocuserView />
</DataTemplate>
<DataTemplate DataType="{x:Type notes:NotesVM}">
<notes:NotesV />
</DataTemplate>
<DataTemplate DataType="{x:Type settings:SettingsVM}">
<settings:SettingsV />
</DataTemplate>
</Window.Resources>
<Grid Height="510" Width="800">
<Grid.RowDefinitions>
<RowDefinition Height="30"/>
<RowDefinition Height="40"/>
<RowDefinition Height="440"/>
</Grid.RowDefinitions>
<mcontrol:WindowTitleBar Grid.Row="0" />
<mcontrol:TabBar Grid.Row="1" />
<Grid Grid.Row="2">
<ContentControl Content="{Binding CurrentPageViewModel}" />
</Grid>
</Grid>
Представление NotesV является UserControl и имеет RichTextBox. Я использовал код, чтобы установить все необходимые кнопки редактирования. Моя проблема в том, что я теряю весь контент RTB, когда я переключаюсь на другую модель представления и затем возвращаюсь. Я не совсем уверен, почему это происходит ... кажется, что теряет состояние или контекст. любая помощь приветствуется.
Обновление: каждый раз выглядит как InitializeComponent, поэтому сохранение его со следующим кодом в статическом классе, похоже, работает, но не кажется эффективным.
Событие SelectionChanged для его сохранения ....
using (var ms = new MemoryStream())
{
var range2 = new TextRange(rtbEditor.Document.ContentStart, rtbEditor.Document.ContentEnd);
range2.Save(ms, DataFormats.Rtf);
ms.Seek(0, SeekOrigin.Begin);
using (var sr = new StreamReader(ms))
{
SkyServer.Notes = sr.ReadToEnd();
}
}
Код конструктора ....
if (!string.IsNullOrEmpty(SkyServer.Notes))
{
Stream SM = new MemoryStream(Encoding.UTF8.GetBytes(SkyServer.Notes));
var range = new TextRange(rtbEditor?.Document.ContentStart, rtbEditor?.Document.ContentEnd);
range.Load(SM, DataFormats.Rtf);
SM.Close();
}