【问题标题】:Accessing a component in a ViewModel C#在 ViewModel C# 中访问组件
【发布时间】:2018-11-08 11:20:16
【问题描述】:

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

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();
}

xaml:

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

【问题讨论】:

  • 为什么不将 GroupBox.IsEnabled 绑定到这个属性?
  • 如果你知道它是如何工作的,我会的
  • 从您的代码中发布一些 xaml sn-ps 并向我们展示您分配 viewModel 的代码

标签: c# xaml viewmodel


【解决方案1】:

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

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

IsEnabled="{Binding PrintPackingCode}"

如果您为复选框命名,您也可以将 IsEnabled 绑定到复选框。

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

【讨论】:

    【解决方案2】:

    在你的虚拟机上创建一个新的属性说

    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}"
    

    【讨论】:

      猜你喜欢
      • 2018-01-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-07-03
      • 2011-10-13
      • 1970-01-01
      相关资源
      最近更新 更多