在ViewModel C#

时间:2018-11-08 11:20:16

标签: c# xaml viewmodel

我有一个在C#中扩展ViewModelBase的类。复选框上已经有一个触发器:

public bool PrintPackingCode
{
    get
    {
        return this.reportConfiguration.PrintPackingCode;
    }

    set
    {
        this.reportConfiguration.PrintPackingCode = value;
        this.OnPropertyChanged("PrintPackingCode");
    }
}

我想陷入该事件并渲染GroupBox来禁用它,但是我找不到访问GroupBox的方法。在.xaml中,我给Box命名了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();
}

xaml:

<CheckBox Content="Content" IsChecked="{Binding Path=PrintPackingCode, UpdateSourceTrigger=PropertyChanged}" Name="PrintPackingCode"/>
<GroupBox Header="Verpackungscode" Name="VerpackungscodeGroupbox">
   //Stuff to be disabled                      
</GroupBox>

2 个答案:

答案 0 :(得分:2)

IsEnabled是环境属性,这意味着如果禁用GroupBox,则该组框中的所有控件也将被禁用。

尝试像这样在GroupBox上添加绑定:

IsEnabled="{Binding PrintPackingCode}"

如果您为复选框指定名称,还可以将IsEnabled绑定到复选框。

<CheckBox x:Name="myCheckBox" .../>
<GroupBox IsEnabled="{Binding ElementName=myCheckBox, Path=IsChecked}"/>

答案 1 :(得分:1)

在您的虚拟机上创建一个新属性,例如

private bool _isGroupEnabled;

public bool IsGroupEnabled
{
    get
    {
        return _isGroupEnabled;
    }

    set
    {
        _isGroupEnabled = value;
        this.OnPropertyChanged("IsGroupEnabled");
    }
}

现在通过为set调整您的PrintPackingCode来配合通知流程

   set
    {
        this.reportConfiguration.PrintPackingCode = value;
        IsGroupEnabled = !value; // reverse of packing to enable/disable.
        this.OnPropertyChanged("PrintPackingCode");
    }

现在这样绑定您的分组框:

isEnabled = "{Binding IsGroupEnabled}"