有的时候,需要利用UserControl占位模板,动态替换的情况,绑定后无法获取DataContext的问题
有的时候,需要利用UserControl占位模板,动态替换的情况,绑定后无法获取DataContext的问题,特此备注下
效果如下:

关键的地方是,下面第3行,需要把当前的上下文传递到Content,生成绑定的ContentTemplate才能获取到绑定在UserControl的DataContext
1 <Style TargetType="UserControl">
2 <Setter Property="ContentTemplate" Value="{StaticResource SingleDataTemplate}" />
3 <Setter Property="Content" Value="{Binding}" />
4 <Style.Triggers>
5 <DataTrigger Binding="{Binding ElementName=rabtn,Path=IsChecked}" Value="false">
6 <Setter Property="ContentTemplate" Value="{StaticResource MultipleTemplate}" />
7 </DataTrigger>
8 </Style.Triggers>
9 </Style>
下面是完成的前后端代码:
1 <Window x:Class="VideoAndAudioDemo.MainWindow"
2 xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
3 xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
4 xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
5 xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
6 xmlns:local="clr-namespace:VideoAndAudioDemo"
7 mc:Ignorable="d"
8 Title="MainWindow" Height="450" Width="800">
9 <Window.Resources>
10 <DataTemplate x:Key="SingleDataTemplate">
11 <RadioButton Content="{Binding Name}" />
12 </DataTemplate>
13 <DataTemplate x:Key="MultipleTemplate">
14 <CheckBox Content="{Binding Name}" />
15 </DataTemplate>
16 <Style TargetType="UserControl">
17 <Setter Property="ContentTemplate" Value="{StaticResource SingleDataTemplate}" />
18 <Setter Property="Content" Value="{Binding}" />
19 <Style.Triggers>
20 <DataTrigger Binding="{Binding ElementName=rabtn,Path=IsChecked}" Value="false">
21 <Setter Property="ContentTemplate" Value="{StaticResource MultipleTemplate}" />
22 </DataTrigger>
23 </Style.Triggers>
24 </Style>
25 </Window.Resources>
26 <Grid>
27 <StackPanel>
28 <StackPanel Orientation="Horizontal">
29 <TextBlock Text="我是模板:" />
30 <UserControl/>
31 </StackPanel>
32 <StackPanel Orientation="Horizontal" Margin="0 20 0 0">
33 <RadioButton x:Name="rabtn" IsChecked="True" GroupName="selected" Content="单选" />
34 <RadioButton GroupName="selected" Content="多选" />
35 </StackPanel>
36 </StackPanel>
37 </Grid>
38 </Window>
1 using System;
2 using System.Collections.Generic;
3 using System.ComponentModel;
4 using System.Linq;
5 using System.Media;
6 using System.Text;
7 using System.Threading.Tasks;
8 using System.Windows;
9 using System.Windows.Controls;
10 using System.Windows.Data;
11 using System.Windows.Documents;
12 using System.Windows.Input;
13 using System.Windows.Media;
14 using System.Windows.Media.Imaging;
15 using System.Windows.Navigation;
16 using System.Windows.Shapes;
17
18 namespace VideoAndAudioDemo
19 {
20 /// <summary>
21 /// MainWindow.xaml 的交互逻辑
22 /// </summary>
23 public partial class MainWindow : Window
24 {
25 public MainWindow()
26 {
27 InitializeComponent();
28 var vm = new MainWindowViewModel();
29 DataContext = vm;
30
31 vm.Name = "测试";
32 }
33 }
34
35 public class MainWindowViewModel : INotifyPropertyChanged
36 {
37 public event PropertyChangedEventHandler PropertyChanged;
38 private string name;
39
40 public string Name
41 {
42 get => name;
43 set
44 {
45 name = value;
46 PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(nameof(Name)));
47 }
48 }
49 }
50 }
有的时候,需要利用UserControl占位模板,动态替换的情况,绑定后无法获取DataContext的问题的更多相关文章
- 基于jquery的表格动态创建,自动绑定,自动获取值
最近刚加入GUT项目,学习了很多其他同事写的代码,感觉受益匪浅. 在GUT项目中,经常会碰到这样一个问题:动态生成表格,包括从数据库中读取数据,并绑定在表格中,以及从在页面上通过jQuery新增删除表 ...
- 微信小程序(五) 利用模板动态加载数据
利用模板动态加载数据,其实是对上一节静态数据替换成动态数据:
- 利用POI 技术动态替换word模板内容
项目中需要实现一个功能,动态替换给定模板里面的内容,生成word文档提供下载功能. 中间解决了问题有: 1.页眉的文档logo图片解决,刚开始的时候,HWPFDocument 对象无法读取图片对象(已 ...
- Spring 利用PropertyPlaceholderConfigurer占位符
Hey Girl 博客园 首页 博问 闪存 新随笔 订阅 管理 posts - 42, comments - 3, trackbacks - 0 Sp ...
- Freemaker基于word模板动态导出压缩文件汇总整理
Freemaker基于word模板动态导出压缩文件汇总整理 Freemaker基于word模板动态导出单个文件思路和代码详情见连接: https://www.cnblogs.com/lsy-blogs ...
- Freemaker基于word模板动态导出汇总整理
Freemaker基于word模板动态导出汇总整理 一.使用的jar包: 二.Word模板动态导出的基本思路: 1.首先通过自己在word中创建好需要导出的word文本+表格的模板,模板中需要填写内容 ...
- [.net 面向对象程序设计进阶] (20) 反射(Reflection)(上)利用反射技术实现动态编程
[.net 面向对象程序设计进阶] (20) 反射(Reflection)(上)利用反射技术实现动态编程 本节导读:本节主要介绍什么是.NET反射特性,.NET反射能为我们做些什么,最后介绍几种常用的 ...
- 利用springloaded进行java class动态替换
我们知道对于一个java文件,如Test.java,首先需要通过javac命令(javac Test.java)进行编译,生成class文件,再将class文件在jvm上进行加载运行,也就是java命 ...
- 利用反射生成JDK动态代理
利用反射生成JDK动态代理 在Java的java.lang.reflect包下提供了一个Proxy类和一个InvocationHandler接口,通过使用这个类和接口可以生成JDK动态代理类和动态代理 ...
- Java 程序动态替换 docx 模板中定制值的实现例子
项目系统中打印功能,导出 word 文档功能是挺常用的,本文介绍自定文档模板,程序实现模板内容中值替代的功能. 模板文件 template.docx 执行 main public static v ...
随机推荐
- java中的HsahMap
HsahMap HashMap 是 Java 中最常用的集合类之一,它实现了 Map 接口,基于哈希表存储键值对 HashMap的存储是无顺序的 HashMap存储的是键值对(key-value)其中 ...
- Java中的Scanner、BufferedReader 和 StreamTokenizer
1. Scanner 的使用与分析 简介: Scanner 是 Java 中一个用于解析原始类型(如 int.double 等)和字符串的类.它通常从输入流中逐个读取数据并进行解析,支持多种分隔符的使 ...
- 玩转云端 | 天翼云边缘安全加速平台AccessOne实用窍门之多款产品管理难?一站式平台管理全hold住!
随着数字化转型深入推进,企业信息化建设成效显著,同时其所面临的安全与性能挑战也日趋复杂,既要确保业务系统的安全性,同时也要提供快速.流畅的用户体验,以提升用户满意度和业务竞争力. 在传统的解决方案中, ...
- 用python做时间序列预测二:时间序列的一般数据格式和可视化
本文将介绍如何通过python来读取.展现时间序列数据. 读取 时间序列数据一般用cvs等电子表格的形式存储,这里以cvs为例: from dateutil.parser import parse f ...
- 永久解决VSCode终端中文乱码问题
方法如下: 在VSCode中通过打开"文件"--"首选项"--"设置", 然后在"setting.json"中 添加以下 ...
- Hive - [06] 行转列,列转行
行转列(多行转一行) 1.创建表,并插入示例数据. create table students_info( `SNO` string comment '学生编号', `name` string com ...
- SpringBoot三种获取Request和Response的方法
通过静态方法获取,你也可以封装一个静态方法出来 @GetMapping(value = "") public String center() { ServletRequestAtt ...
- windows在Apple Developer创建打包证书的简单教程
在uniapp上做ios开发,其开发证书必须在Apple Developer(苹果开发者中心)上使用自己个人或自己公司的开发者账号,创建打包的证书,然后上架的时候使用同一个账号上架Apple Deve ...
- 解决kali虚拟机无法联网问题
解决kali虚拟机无法联网问题 1.排查虚拟机网络连接-检查ipv4设置,确定好手动连接还是DHCP 如图一 2.排查虚拟网络编辑器-网卡配置,确定虚拟机直连外部网络是否为同一网口 如图二 3.排查虚 ...
- 最新活动 ISS 国际空间站 MAI-75 SSTV活动计划于2020年8月4日至5日
MAI-75 SSTV活动计划于2020年8月4日和5日举行 8月3日至9日这一周的最后宇航员时间表最近公布了,它显示了定于8月4日和5日进行的MAI-75活动.这是在Space X Demo-2脱 ...