如何将WPF DataGrid DataColumns可见性绑定到UserControl的ViewModel上的属性?

时间:2017-05-31 19:26:39

标签: .net wpf xaml mvvm

我有一个包含在UserControl中的WPF DataGrid。

在用户控件的ViewModel中,我定义了以下内容:

private Visibility _ColumnVisibility;
public Visibility ColumnVisibility
{
get { return _ColumnVisibility;}
set {this._ColumnVisibility= value;
     OnNotifyPropertyChanged("ColumnVisibility");}
}

XAML中的我的列定义如下所示:

<DataGrid.Columns>
  <DataGridTextColumn Binding="{Binding UserCode}"
    Header="UserCode"
    Visibility="{Binding RelativeSource={RelativeSource AncestorType=UserControl},Path=ColumnVisibility}"/>
</DataGrid.Columns>

我在运行时收到以下异常:

  

System.Windows.Data错误:4:找不到绑定源   参考&#39; RelativeSource FindAncestor,   AncestorType =&#39; System.Windows.Controls.UserControl&#39 ;,   AncestorLevel =&#39; 1&#39;&#39 ;. BindingExpression:路径= ColumnVisibility;   的DataItem = NULL;目标元素是&#39; DataGridTextColumn&#39;   (的HashCode = 21737301);目标财产是“可见性”&#39; (类型   &#39;能见度&#39)

将DataGrid列可见性绑定到包含UserControl的ViewModel中定义的属性的最佳方法(最简单)是什么?

1 个答案:

答案 0 :(得分:1)

我在这里通过 AnjumSKhan 在SO中找到了一个优雅的解决方案: Python - PYTHONPATH in linux

<input type="hidden" class="form-control" id="name" onChange='runScript(this.value)' value="test value">

<script>
  function runScript(value) {
    console.log('value--->' + value);
  }
  //get init value
  var initValue = document.getElementById('name').value;
  //init
  window.onload = runScript(initValue);
</script>