gpt4 book ai didi

c# - 动态更新 TextBlock 内容的最佳实践

转载 作者:行者123 更新时间:2023-12-02 20:28:13 26 4
gpt4 key购买 nike

我正在使用 UserControlTextBlock 元素创建一个 WPF 应用程序。该元素的内容取决于 View 模型中的枚举(成功、待处理、错误等)。

以下是 TextBlock 不同状态的一些示例:

示例 1 - 简单

<TextBlock>
Please wait
</TextBlock>

示例 2 - 使用超链接

<TextBlock>
Searching for item. <Hyperlink Command="{Binding DetailsCommand}">Link to details</Hyperlink>
</TextBlock>

示例 3 - 带换行符

<TextBlock>
The content has been uploaded<LineBreak />
The item is not ready to use
</TextBlock>

根据 View 模型中枚举的状态动态更改此元素的内容的最佳方法是什么?如果我将 Text 属性绑定(bind)到 View 模型中的字符串,我认为我无法插入 HyperlinkLineBreak 等子元素。有哪些选项我有吗?

最佳答案

我会用 TemplateSelector 来实现它:

public class TemplSelector : DataTemplateSelector
{
public override DataTemplate SelectTemplate(object item, DependencyObject container)
{
var element = container as FrameworkElement;

if (element != null && item != null)
{
var vm = (ViewModel)item;

if (vm.YourEnum == 1)
return element.FindResource("templ1") as DataTemplate;
else if (vm.YourEnum == 0)
return element.FindResource("templ0") as DataTemplate;
}

return null;
}
}
<Window.Resources>
<local:TemplSelector x:Key="templSel"/>
</Window.Resources>
<ContentPresenter ContentTemplateSelector="{StaticResource templSel}" Content="{Binding ViewModel}">
<ContentPresenter.Resources>
<DataTemplate x:Key="templ0">
<TextBlock>
Please wait
</TextBlock>
</DataTemplate>
<DataTemplate x:Key="templ1">
<TextBlock>
Searching for item. <Hyperlink Command="{Binding DetailsCommand}">Link to details</Hyperlink>
</TextBlock>
</DataTemplate>
</ContentPresenter.Resources>
</ContentPresenter>

关于c# - 动态更新 TextBlock 内容的最佳实践,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49391675/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com