Wpf 如何将富文本框添加到选项卡项,以便可以将其添加到MVVM中的选项卡控件?
如何将RichTextBox添加到选项卡项,以便可以将其添加到选项卡控件,并以MVVM格式动态显示RichTextBox中的相应内容 视图模型 看法Wpf 如何将富文本框添加到选项卡项,以便可以将其添加到MVVM中的选项卡控件?,wpf,mvvm,tabcontrol,tabitem,Wpf,Mvvm,Tabcontrol,Tabitem,如何将RichTextBox添加到选项卡项,以便可以将其添加到选项卡控件,并以MVVM格式动态显示RichTextBox中的相应内容 视图模型 看法 我使用了这段代码,工作正常,这不在MVVM中,这是WAF体系结构,因为我使用的是MVVM概念。你没有想到MVVM。在ViewModel中,您不会直接访问UI元素,而是希望设置能够正确呈现ViewModel的绑定和数据模板。正确的方法是使用两个viewmodels,一个用作主视图,另一个用作每个选项卡的底层DataContext 一个简单的例子如下:
我使用了这段代码,工作正常,这不在MVVM中,这是WAF体系结构,因为我使用的是MVVM概念。你没有想到MVVM。在ViewModel中,您不会直接访问UI元素,而是希望设置能够正确呈现ViewModel的绑定和数据模板。正确的方法是使用两个viewmodels,一个用作主视图,另一个用作每个选项卡的底层DataContext 一个简单的例子如下: 主视图模型 在本例中,主视图模型不了解视图,只向其自己的ObservableCollection添加项。TabControl本身通过绑定到TextTabs,添加自己的选项卡项,并使用ItemTemplate和ContentTemplate属性呈现它们
下载代码这与MVVM不兼容-在您的ViewModel中不能有TabItem或任何与gui相关的元素抱歉,这不是MVVM,只是MVVM概念,我在上面使用它意味着什么!==>你不能这样做,因为包含的是gui元素——它正在等待与datatemplate关联的类——你混合了一切……它工作正常,它是架构,即WAF,但问题是richtextbox没有添加到我们已经做过传统WPF的Tabitem中。你不能这样做,因为包含的是gui元素否我使用的是MVVM概念,但实际上它是架构WAF。所以我想在每个选项卡中添加RichTextBox,这些选项卡已经绑定到Tabcontrol,正如我在问题中提到的。所以请修改你的答案@MarkGreen@Ajay,如果您查看我的答案,您将看到每个选项卡都有一个RichTextBox。它包含在每个选项卡项的ContentTemplate中。这是正确的方法。
private ObservableCollection<TabItem> TabControl()
{
ObservableCollection<TabItem> Tabs= new ObservableCollection<TabItem>();
return Tabs;
}
private void AddNewTabItem(string selectedItem)
{
try
{
System.Windows.Controls.RichTextBox richtextbox = new System.Windows.Controls.RichTextBox();
richtextbox.Name = "richtextbox" + selectedItem;
BrushConverter BC = new BrushConverter();
richtextbox.Background = (SolidColorBrush)(BC.ConvertFrom("#FF098BBB"));
richtextbox.Foreground = System.Windows.Media.Brushes.WhiteSmoke;
richtextbox.IsReadOnly = true;
TabItem m_tabItem = new TabItem();
m_tabItem.Header = selectedItem;
m_tabItem.Name = "tab" + selectedItem;
if (TabControl.Items.Count == 0)
{
TabControl.Items.Insert(0, m_tabItem);
TabControl.SelectedIndex = msgTracerTabControl.Items.Count - 1;
}
else
{
TabControl.Items.Insert(msgTracerTabControl.Items.Count - 1, m_tabItem);
TabControl.SelectedIndex = msgTracerTabControl.Items.Count - 2;
}
m_tabItem.Content = new System.Windows.Controls.RichTextBox();
m_tabItem.Content = richtextbox;
Tabs.add(m_tabItem);
}
catch (Exception EX)
{
}
}
<TabControl Grid.Column="1" Grid.Row="1" ItemsSource="{Binding TabControl}" }"/>
public class MainViewModel : BindableBase
{
private int _tabSuffix;
public ObservableCollection<TextViewModel> TextTabs { get; set; } = new ObservableCollection<TextViewModel>();
public DelegateCommand AddNewTabCommand { get; set; }
public MainViewModel()
{
AddNewTabCommand = new DelegateCommand(OnAddNewTabCommand);
}
private void OnAddNewTabCommand()
{
TextTabs.Add(new TextViewModel()
{
Header = $"Tab #{_tabSuffix++}"
});
}
}
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition />
</Grid.RowDefinitions>
<Button Grid.Row="0" Content="Add new tab item" Command="{Binding AddNewTabCommand}"></Button>
<TabControl Grid.Row="1"
ItemsSource="{Binding TextTabs}"
IsSynchronizedWithCurrentItem="True">
<!-- Defines the header -->
<TabControl.ItemTemplate>
<DataTemplate DataType="{x:Type so44497239:TextViewModel}">
<TextBlock Text="{Binding Header}" />
</DataTemplate>
</TabControl.ItemTemplate>
<!-- defines the context of each tab -->
<TabControl.ContentTemplate>
<DataTemplate DataType="{x:Type so44497239:TextViewModel}">
<RichTextBox Background="#FF098BBB" Foreground="WhiteSmoke" IsReadOnly="False" />
</DataTemplate>
</TabControl.ContentTemplate>
</TabControl>
</Grid>
public class TextViewModel : BindableBase
{
public string Header { get; set; }
public Brush BackgroundBrush { get; set; }
public Brush ForegroundBrush { get; set; }
public string Document { get; set; }
}