有的时候,需要利用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的问题的更多相关文章

  1. 基于jquery的表格动态创建,自动绑定,自动获取值

    最近刚加入GUT项目,学习了很多其他同事写的代码,感觉受益匪浅. 在GUT项目中,经常会碰到这样一个问题:动态生成表格,包括从数据库中读取数据,并绑定在表格中,以及从在页面上通过jQuery新增删除表 ...

  2. 微信小程序(五) 利用模板动态加载数据

    利用模板动态加载数据,其实是对上一节静态数据替换成动态数据:

  3. 利用POI 技术动态替换word模板内容

    项目中需要实现一个功能,动态替换给定模板里面的内容,生成word文档提供下载功能. 中间解决了问题有: 1.页眉的文档logo图片解决,刚开始的时候,HWPFDocument 对象无法读取图片对象(已 ...

  4. Spring 利用PropertyPlaceholderConfigurer占位符

      Hey Girl   博客园    首页    博问    闪存    新随笔    订阅     管理 posts - 42,  comments - 3,  trackbacks - 0 Sp ...

  5. Freemaker基于word模板动态导出压缩文件汇总整理

    Freemaker基于word模板动态导出压缩文件汇总整理 Freemaker基于word模板动态导出单个文件思路和代码详情见连接: https://www.cnblogs.com/lsy-blogs ...

  6. Freemaker基于word模板动态导出汇总整理

    Freemaker基于word模板动态导出汇总整理 一.使用的jar包: 二.Word模板动态导出的基本思路: 1.首先通过自己在word中创建好需要导出的word文本+表格的模板,模板中需要填写内容 ...

  7. [.net 面向对象程序设计进阶] (20) 反射(Reflection)(上)利用反射技术实现动态编程

    [.net 面向对象程序设计进阶] (20) 反射(Reflection)(上)利用反射技术实现动态编程 本节导读:本节主要介绍什么是.NET反射特性,.NET反射能为我们做些什么,最后介绍几种常用的 ...

  8. 利用springloaded进行java class动态替换

    我们知道对于一个java文件,如Test.java,首先需要通过javac命令(javac Test.java)进行编译,生成class文件,再将class文件在jvm上进行加载运行,也就是java命 ...

  9. 利用反射生成JDK动态代理

    利用反射生成JDK动态代理 在Java的java.lang.reflect包下提供了一个Proxy类和一个InvocationHandler接口,通过使用这个类和接口可以生成JDK动态代理类和动态代理 ...

  10. Java 程序动态替换 docx 模板中定制值的实现例子

    项目系统中打印功能,导出 word 文档功能是挺常用的,本文介绍自定文档模板,程序实现模板内容中值替代的功能. 模板文件 template.docx ​ 执行 main public static v ...

随机推荐

  1. windows 安装Nacos步骤

    一.Nacos中文文档网址 1.Nacos官网地址:https://nacos.io/en-us/ Nacos中文文档网址:Nacos 快速开始https://nacos.io/zh-cn/docs/ ...

  2. Prism 学习(一)

    转载自:http://www.cnblogs.com/Clingingboy/archive/2009/01/07/prism_part2.html 本篇将介绍Prism中Region的使用. 本篇D ...

  3. 收集 Spring Boot 相关的学习资料

    收集 Spring Boot 相关的学习资料,Spring Cloud点这里 重点推荐:Spring Boot 中文索引 推荐博客 纯洁的微笑-Spring Boot系列文章 林祥纤-从零开始学Spr ...

  4. Emacs 的优点及与 DE 的比较

    一.引言 在编程领域,对于工具的选择一直是开发者们热议的话题.今天,我们来探讨一下 Emacs 及其所具有的优点,并思考使用 Emacs 写程序是否真的比使用集成开发环境(IDE)更方便. 二.Ema ...

  5. Ansible 数百台批量操作前期准备工作

    Ansible 数百台批量操作前期准备工作 背景: 当前有100台服务器在同一个内网,需要统一部署业务程序并且对主机修改主机名,只提供了一个文档host_user.txt,内容 " IP 用 ...

  6. 浅谈Processing中的 println() 打印输出函数[String]

    简单看一下Processing中的打印输出函数println()相关用法. 部分源码学习 /** * ( begin auto-generated from println.xml ) * * Wri ...

  7. @autowired注解报错原因及解决办法

    @autowired 注入dao层的时候,标红报错,但不影响编译使用 按照严格的spring注解方式在dao层加入@Repository注解

  8. git上传大文件!git push 报错 ! [remote rejected] main -&gt; main (pre-receive hook declined) error_ failed to push some refs to &#39;xxx

    前言 今天在用git push项目的时候,出现了一个报错,记录一下解决方案,以后报同样的错误可以回来看. 错误信息 下面是git push的详细报错信息: 20866@DESKTOP-7R0VL04 ...

  9. 使用PySide6/PyQt6实现Python跨平台通用列表页面的基类设计

    我在随笔<使用PySide6/PyQt6实现Python跨平台GUI框架的开发>中介绍过PySide6/PyQt6 框架架构的整体设计,本篇随笔继续深入探讨框架的设计开发工作,主要针对通用 ...

  10. 不上苹果的app store,安装ios应用最简单的方法

    不上架appstore,安装app有两种方法,一种是使用企业类型的苹果开发者账号的In house类型的证书和证书profile文件打包,一种是使用个人/公司类型的苹果开发者账号的ad hoc类型的证 ...