有的时候,需要利用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 ...
随机推荐
- List<Map<String, Object>> 排序
一.代码 public class Test { public static void main(String[] args) { Map<String, Object> map = ne ...
- 2024电子取证“獬豸杯”WP
简介: 竞赛为个人赛,工具自备,只发证书(还没用,公告这么写的哈)竞赛选手们将对模拟的案件进行电子数据调查取证,全面检验参赛选手电子数据取证的综合素质和能力. 检材链接: https://pan.ba ...
- 火爆的 幻兽帕鲁/Palworld 单机➕联机 电脑游戏 免费畅游
在广阔的世界中收集神奇的生物"帕鲁",派他们进行战斗.建造.做农活,工业生产等,这是一款支持多人游戏模式的全新开放世界生存制作游戏. ▼补丁主要内容 ・修复加载世界数据时,加载画面 ...
- MySQL - [17] Oracle、SQLServer、MySQL数据类型对比
题记部分 一.数据类型对比 对应关系 (1)整数类型 Oracle的NUMBER(*,0) 对应 SQL Server的INT 和 MySQL的INT Oracle的BIGINT 可能需要映射到SQL ...
- Linux - centos6.6升级openssh9.7p1
一.注意事项 1.任何会被修改的配置文件都要提前备份 2.每一步操作都要记录 3.提前预演,知道可能遇到的问题,以及对应的解决方法,能够在生产环境上升级时,更快完成操作. 4.一开始用来操作的ssh会 ...
- 洛谷P4390 [BalkanOI2007] Mokia 摩基亚 题解
题目传送门. 想必 我的另外一篇题解 已经把这道题的思路说的很清楚了,但是那道题是把所有的修改全部告诉你,然后再一个一个问你矩阵和,但是这道题他是修改中夹着询问,但是没有关系,我们照样可做. 考虑将所 ...
- GPT-4.5 感觉有点拉胯,但其实是 OpenAI 迄今为止最大的一步赌注
Alberto Romero I. GPT-4.5 就是起跳前的助跑那一步 OpenAI 推出了 GPT-4.5(官方博客.系统卡片.演示视频),这是他们最新也是目前最大的一款 AI 模型.他们其实一 ...
- PPT 技巧&网站
样机生成网站 https://mockuphone.com/device?type=computer CTROL+L 演示生成荧光笔 3.如何内嵌字体 文件->选项->保存->勾选潜 ...
- 导出和导入word样式模板
对于自己配置过之后常用的word样式可以导出作为样式模板, 可以重复使用. 举例说一下哪些是常用的word样式, 例如: (常见的): 中文的内容的样式, 中英文分别设置不同的样式 (比较高级的)多级 ...
- 22. Generate Parentheses--求n对括号组成可以组成的全部有效括号序列
描述: Given n pairs of parentheses, write a function to generate all combinations of well-formed paren ...