【发布时间】:2023-04-09 16:11:01
【问题描述】:
正如标题所示,我希望将元素背后的代码注入到数据模板中,以便在运行时呈现。
这是我想将元素后面的代码注入的 XAML 代码:
<TabControl x:Name="tcDocuments" DockPanel.Dock="Top">
<TabControl.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal">
<TextBlock Text="{Binding Name}" />
<Button Content="x" />
</StackPanel>
</DataTemplate>
</TabControl.ItemTemplate>
<TabControl.ContentTemplate>
<DataTemplate>
(INSERT CLASS BELOW'S CONTENT PROPERTY HERE)
</DataTemplate>
</TabControl.ContentTemplate>
</TabControl>
这是我将添加到 TabControl 上面的 Items 的类:
public class DocumentTab
{
public string File { get; set; }
public string Name { get; set; }
public RichTextBox Content { get; set; }
}
然后每次我将一个新的 DocumentTab 对象添加到 TabControl 的 Item 列表时,RichTextBox 属性“Content”就会插入到 DataTemplate 标记中。
我想这里真正的问题是这可能吗?
干杯。
【问题讨论】:
-
会一直是 DocumentTab 吗?您能否将 TabControl 的 ItemsSource 绑定到 ObservableCollection
,并让 DataTemplate 成为 RichTextBox?您需要更改 Content 的数据类型。 -
您可以在 DataTemplate 中放置一个 ContentControl 并将其 Content 属性设置为与 DocumentTab 的 Content 属性的绑定,或者任何具有 Content 属性的模型。这允许您使用任何具有 Content 属性的类
-
您通常不应在模型中引用 UI 元素 (
RichTextBox)。