当前位置: 首页 > news >正文

Avalonia 根据绑定的数据类型动态选择模板

public partial class CommandParameterDialog : Window
{public CommandParameterDialog(){InitializeComponent();// 挂工厂事件var factory = this.FindResource("ParameterTemplateFactory") as RecyclingElementFactory;factory!.SelectTemplateKey += OnSelectTemplateKey;}private void OnSelectTemplateKey(object? sender, SelectTemplateEventArgs e){e.TemplateKey = e.DataContext switch{DateTimeParameterViewModel => "DateTimeTemplate",StringParameterViewModel => "StringTemplate",EnumParameterViewModel => "EnumTemplate",Int32ParameterViewModel => "Int32Template",DoubleParameterViewModel => "DoubleTemplate",_ => throw new ArgumentOutOfRangeException()};}protected override void OnDataContextChanged(EventArgs e){base.OnDataContextChanged(e);if (DataContext is CommandParameterDialogViewModel vm){vm.CloseAction = result =>{Close(result);};}}
}
  <Design.DataContext><viewModels:CommandParameterDialogViewModel></viewModels:CommandParameterDialogViewModel></Design.DataContext><Window.Resources><RecyclingElementFactory x:Key="ParameterTemplateFactory"><RecyclingElementFactory.Templates><!-- 模板:INT32 --><DataTemplate x:Key="Int32Template" DataType="{x:Type viewModels:Int32ParameterViewModel}"><StackPanel Margin="0,8"><TextBlock Text="{Binding DisplayName}" FontWeight="Bold" /><TextBox Text="{Binding Value, Mode=TwoWay}"Watermark="请输入整数" /></StackPanel></DataTemplate><!-- 模板:DOUBLE --><DataTemplate x:Key="DoubleTemplate" DataType="{x:Type viewModels:DoubleParameterViewModel}"><StackPanel Margin="0,8"><TextBlock Text="{Binding DisplayName}" FontWeight="Bold" /><TextBox Text="{Binding Value, Mode=TwoWay}"Watermark="请输入小数" /></StackPanel></DataTemplate><!-- 模板:STRING --><DataTemplate x:Key="StringTemplate" DataType="{x:Type viewModels:StringParameterViewModel}"><StackPanel Margin="0,8"><TextBlock Text="{Binding DisplayName}" FontWeight="Bold" /><TextBox Text="{Binding Value, Mode=TwoWay}"Watermark="请输入文本" /></StackPanel></DataTemplate><!-- 模板:ENUM --><DataTemplate x:Key="EnumTemplate" DataType="{x:Type viewModels:EnumParameterViewModel}"><StackPanel Margin="0,8"><TextBlock Text="{Binding DisplayName}" FontWeight="Bold" /><ComboBox ItemsSource="{Binding Options}"SelectedItem="{Binding SelectedValue, Mode=TwoWay}" PlaceholderText="请选择" /></StackPanel></DataTemplate><!-- 模板:DATETIME --><DataTemplate x:Key="DateTimeTemplate" DataType="{x:Type viewModels:DateTimeParameterViewModel}"><StackPanel Margin="0,8"><TextBlock Text="{Binding DisplayName}" FontWeight="Bold" /><DatePicker SelectedDate="{Binding Value, Mode=TwoWay}" /></StackPanel></DataTemplate></RecyclingElementFactory.Templates></RecyclingElementFactory></Window.Resources><DockPanel Margin="16"><!-- 底部按钮 --><StackPanel DockPanel.Dock="Bottom" Orientation="Horizontal" HorizontalAlignment="Right" Spacing="8"><Button Content="取消" Width="80" Command="{Binding CancelCommand}" /><Button Content="确定" Width="80" Command="{Binding ConfirmCommand}"IsEnabled="{Binding IsValid}" /></StackPanel><!-- 参数列表 --><ScrollViewer HorizontalScrollBarVisibility="Disabled"VerticalScrollBarVisibility="Auto"><ItemsRepeater ItemsSource="{Binding Parameters}" ItemTemplate="{StaticResource ParameterTemplateFactory}"><ItemsRepeater.Layout><StackLayout Orientation="Vertical" Spacing="8" /></ItemsRepeater.Layout></ItemsRepeater></ScrollViewer></DockPanel>
http://www.jsqmd.com/news/1387/

相关文章:

  • PyTorch图神经网络(一)
  • Python版Sigstore稳定版发布:软件供应链签名新标准
  • 仿照豆包实现 Prompt 变量模板输入框
  • 【公益福利】Agent Router注册即送200刀!仅限Github/Linux.do用户,手慢无!
  • Java实现双色球历史开奖对比器
  • 网速带宽概念
  • 跨网传输软件:打通数据孤岛,保障安全流通!
  • 「KDOI-07」能量场
  • AfriMed-QA
  • 基于LQR控制器的柔性机械臂抑振
  • 202507_QQ_caidundun
  • DevExpress WinForms v25.1新版亮点:全新升级侧边导航布局
  • outlook大附件发送是什么?
  • 成都恒利泰HT-SCA-4-10+是一款1分4射频功分器
  • 研发项目管理能力建设路线图
  • 好用的提示词
  • 202312_Dest0g3_StrageTraiffic
  • 使用 AI app 模板扩展来创建基于订制数据进行聊天的 .NET AI 应用
  • 2025年内外网文件传输新范式:十大好用的内外网文件摆渡系统
  • 双分布函数热 LBM 模拟二维封闭方腔自然对流
  • 【前端高频面试题】- React篇 - 指南
  • asp.net中的wwwroot是什么
  • 用光学计算加速AI模型中的卷积和矩阵乘法操作
  • 了解IWebHostEnvironment : IHostEnvironment
  • PDF24 Creator(完全免费多功能PDF工具箱) 易于使用 多语言支持 - 教程
  • 彩笔运维勇闯机器学习--lasso回归
  • IP地址的配置
  • 工业检测为啥首选黑白相机?4 个核心优势,彩色相机比不了 - 指南
  • 202504_CHIMA模拟_Shiro流量分析
  • vscode彻底删除安装过的插件和个人配置信息