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

これが私が試した多くの設定の1つです(これは周期的な依存関係エラーを引き起こします)。

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に関するさまざまな記事があります。「wpfvisibilitybindingdatagridcolumn」を検索します。

問題は、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 に答える