2012-05-16 2 views
0

WPF/XAML/MVVM Light 응용 프로그램의 공용 속성에 설정된 값에 따라 DataGridTextcolumn을 축소하려는 아이디어가 부족합니다.DataGridTextColumns를 Binding으로 축소하는 방법

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 의존성 오류가 있습니다) 내가 해봤 많은 중 하나입니다.

뷰 모델 코드의 관련 추출물은 : 나는 내가 필요로이 문서 (http://stackoverflow.com/questions/8847661/datagridtextcolumn-visibility-binding)에 의해 통보 한

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; 
} 

소스 및 Xreference를 사용합니다. 어떤 도움을 주셔서 감사합니다.

답변

1

이 문제를 논의하는 다양한 기사가 있습니다. "wpf visibility binding datagrid column"을 검색하십시오.

DataGrid 열이 DataGrid의 시각적 트리 또는 논리 트리에 속하지 않으므로 WPF에서 적절한 DataContext를 찾을 수 없기 때문에 문제가 발생합니다. 친척 또는 요소 바인딩을 사용하려는 시도도 실패합니다.

일부 영리한 사람들은 이미이 문제를 해결했습니다. 내가 가장 좋아하는 솔루션은 여기서 설명하는 프록시 freezable 메서드이다 : http://www.thomaslevesque.com/2011/03/21/wpf-how-to-bind-to-data-when-the-datacontext-is-not-inherited/ 나를 위해 잘 작동합니다.

+0

답장을 보내 주셔서 감사합니다.하지만 필자는 그 사실을 단지 눈치 채 셨습니다. 귀하의 회신 전에 다른 방식으로 문제를 해결했습니다.

+0

다시 답장을 보내 드리겠습니다! 감사합니다 Phil - 두 개의 DataGrid를 사용하여 속성에서 보유한 두 개의 반대 값에 바인딩 된 가시성을 설정하고 OnProjectSelected의 switch 문에 적용했습니다. –

관련 문제