0

我已经没有想法尝试根据公共属性中设置的值(在 WPF/XAML/MVVM Light 应用程序中)折叠 DataGridTextcolumn。

xaml 的提取物是:

<StackPanel>
      <DataGrid AutoGenerateColumns="False" Name="PipelinesGrid" 
              HorizontalAlignment="Left" 
              ItemsSource="{Binding Pipelines}"
              SelectedItem="{Binding SelectedPipelineView, Mode=TwoWay}"  
              VerticalAlignment="Top" Margin="10,16,0,0" 
              SelectionUnit="FullRow" SelectionMode="Single" 
              CanUserAddRows="False">
        <DataGrid.Columns>
            <DataGridTextColumn 
                 Binding="{Binding DailyCapacity, Mode=TwoWay}" 
                 Header="Capacity(d)" 
                 Visibility="{Binding Source={x:Reference PipelinesGrid}, 
                                      Path=DataContext.ShowCapacities}"/>

这是 Visibility 设置是我尝试过的众多设置之一(这个设置会产生周期性依赖错误)。

ViewModel 代码的相关摘录是:

private string _showCapacities;

public string ShowCapacities
{
    get { return _showCapacities; }
    set { _showCapacities = value; RaisePropertyChanged("ShowCapacities"); }
}

private void OnProjectSelected(ProjectSelectedArgs obj)
{
    _selectedProject = obj.SelectedProject;

    if (_selectedProject != null)
    {
        Pipelines = new ObservableCollection<PipelineView>();
        foreach (var projectPipeline in _selectedProject.ProjectPipelines)
        {
            Pipelines.Add(new PipelineView(projectPipeline));
        }

        switch (_selectedProject.ProjectCategory.ProjectCategory1)
        {
        case "Upstream":
            ShowCapacities = "Collapsed";
            break;
        case "Mid-Stream":
            ShowCapacities = "Visible";
            break;
        }
    }

    IsEditing = false;
}

这篇文章 (http://stackoverflow.com/questions/8847661/datagridtextcolumn-visibility-binding) 告诉我,我需要使用 Source 和 Xreference。谢谢你的帮助。

4

1 回答 1

1

SO上有各种文章讨论这个问题。搜索“wpf 可见性绑定数据网格列”。

问题是因为DataGrid列不属于DataGrid的可视化或逻辑树,所以WPF找不到合适的DataContext。尝试使用相对或元素绑定也会失败。

不用说,一些聪明的人已经解决了这个问题。我最喜欢的解决方案是这里解释的代理可冻结方法:http ://www.thomaslevesque.com/2011/03/21/wpf-how-to-bind-to-data-when-the-datacontext-is-not-inherited /这对我来说很好。

于 2012-05-26T15:54:24.740 回答