c# - 在 ViewModel C# 中访问组件
问题描述
我有一个ViewModelBase
在 C# 中扩展的类。复选框上已经有触发器:
public bool PrintPackingCode
{
get
{
return this.reportConfiguration.PrintPackingCode;
}
set
{
this.reportConfiguration.PrintPackingCode = value;
this.OnPropertyChanged("PrintPackingCode");
}
}
我想挂钩该事件并渲染一个GroupBox
以禁用,但我找不到访问 GroupBox 的方法。在.xaml
我给我的盒子命名为PackingcodeGroupBox
. 我发现的所有方法和提示都不适用。我的尝试包括:
Direct Access: PackingcodeGroupBox.Enabled = false;
Using a x:Name
this.Resources["mykey"]
这里还有一些代码:
//At program start assign the view it's view model:
new SmlKonfigurationWindow(new SmlKonfigurationWindowVm(reportConfiguration, smlKonfigurationDialogVm));
public SmlKonfigurationWindow(ISmlKonfigurationWindowVm viewModel)
{
this.DataContext = viewModel;
this.viewModel = viewModel;
this.InitializeComponent();
this.ShowDialog();
}
xml:
<CheckBox Content="Content" IsChecked="{Binding Path=PrintPackingCode, UpdateSourceTrigger=PropertyChanged}" Name="PrintPackingCode"/>
<GroupBox Header="Verpackungscode" Name="VerpackungscodeGroupbox">
//Stuff to be disabled
</GroupBox>
解决方案
IsEnabled 是环境属性,这意味着如果禁用 GroupBox,该组框内的所有控件也将被禁用。
尝试像这样在 GroupBox 上添加绑定:
IsEnabled="{Binding PrintPackingCode}"
如果您为复选框命名,您还可以将 IsEnabled 绑定到复选框。
<CheckBox x:Name="myCheckBox" .../>
<GroupBox IsEnabled="{Binding ElementName=myCheckBox, Path=IsChecked}"/>
推荐阅读
- excel - 使用循环计算 VBA 中单元格中 TODAY() 和日期之间的天数
- php - PHP array_push 错误推送数据
- html - 如何在每次迭代时延迟播放 css?
- reactjs - 反应路由器重定向重新渲染调用它的相同组件,而不是重定向到指定路径
- css - Eric Meyer 的 reset.css 中“字体”和“内容”覆盖的原因是什么?
- jenkins - Jenkins API - 是否有用于只读访问的非用户(例如基于作业的)API 令牌?
- google-cloud-platform - Google Cloud 大量磁盘 I/O(操作)
- rest - 将 Angular 6 中的休息后响应作为客户端和 Spring 引导作为服务器 API
- visual-foxpro - 如何计算 VFP 中的条件?
- html - AngularJS Scroller Directive 用于创建没有库/插件的连续滚动图像