2012-05-16 51 views
0

我已經用盡了想法,試圖根據公共屬性(在WPF/XAML/MVVM Light應用程序中)中設置的值摺疊DataGridTextcolumn。如何使用綁定摺疊DataGridTextColumns

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

這裏是可見性設置是很多,我已經嘗試過(這個人給一個cycylical依賴錯誤)之一。

視圖模型代碼的相關提取物是:

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。謝謝你的幫助。

回答

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/對我來說工作得很好。

+0

感謝您的回答菲爾,但我只注意到它今天。我在回覆之前以不同的方式解決了問題。 <數據網格的AutoGenerateColumns = 「假」 名稱= 「PipelinesGrid」 的Horizo​​ntalAlignment = 「左」 的ItemsSource = 「{結合管道}」 的SelectedItem = 「{結合SelectedPipelineView,模式=雙向}」 VerticalAlignment = 「頂部」 保證金=「10 ,16,0,0「SelectionUnit =」FullRow「SelectionMode =」Single「CanUserAddRows =」False「 –

+0

我會嘗試再次回覆!感謝Phil - 我使用了兩個DataGrid,並將它們的可見性綁定到屬性中保存的兩個相反的值,並將它們應用於OnProjectSelected中的switch語句中。 –