【问题标题】:How to collapse DataGridTextColumns with Binding如何使用绑定折叠 DataGridTextColumn
【发布时间】:2012-05-23 21:33:02
【问题描述】:

根据公共属性中设置的值(在 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}"/>

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

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。谢谢你的帮助。

【问题讨论】:

    标签: wpfdatagrid


    【解决方案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/ 这对我来说很好。

    【讨论】:

    • 感谢菲尔的回答,但我今天才注意到。在您回复之前,我以不同的方式解决了问题。
    • 我会尝试再次回复!谢谢 Phil - 我使用了两个 DataGrid,并将它们的可见性绑定到属性中保存的两个相反值,并将它们应用到 OnProjectSelected 的 switch 语句中。
    猜你喜欢
    • 1970-01-01
    • 2011-12-21
    • 2014-09-13
    • 1970-01-01
    • 2014-09-23
    • 2012-04-29
    • 1970-01-01
    • 2012-02-09
    • 1970-01-01
    相关资源
    最近更新 更多