2016-06-15 9 views
0

ネストされたデータグリッドがあり、内部データグリッドにデータがない場合は外部データグリッドカラムを非表示にします。 MVVMパターンを使用しています。モデルは、ビューにバインドされたコレクション内のデータを埋め込みます。内部データグリッドの内容に基づいてネストされたデータグリッドカラムの可視性

Filled Datagrid

コンポーネント1、2及び3のリストは、外側のデータグリッド内のデータグリッドを介して表示されます。各ラベルファミリーには、左右2つのコレクションがあります。

モデルに左ラベル収集のコンポーネントがない場合は、左の列を完全に非表示にします。下の画像のように。右欄も同様です。

Left Column Hidden

これを達成するために私を助けてください。

私はこのサイトとGoogleの類似した状況を検索しましたが、これに類似したものは見つかりませんでした。ここで

は、XAMLコードです:

<DataGrid ItemsSource="{Binding Labels}"       
      CanUserAddRows="False" 
      CanUserDeleteRows="False"> 
    <DataGrid.Columns> 
     <DataGridTemplateColumn Width="10*" > 
      <DataGridTemplateColumn.CellTemplate> 
       <DataTemplate> 
        <TextBlock Text="{Binding LabelFamily}" /> 
       </DataTemplate> 
      </DataGridTemplateColumn.CellTemplate> 
     </DataGridTemplateColumn> 
     <DataGridTemplateColumn Header="Right" Width="25*"> 
      <DataGridTemplateColumn.CellTemplate> 
       <DataTemplate> 
        <DataGrid ItemsSource="{Binding LeftLabel.Components}"            
           CanUserAddRows="False" 
           CanUserDeleteRows="False">           
        </DataGrid> 
       </DataTemplate> 
      </DataGridTemplateColumn.CellTemplate> 
     </DataGridTemplateColumn> 
     <DataGridTemplateColumn Header="Left" Width="25*"> 
      <DataGridTemplateColumn.CellTemplate> 
       <DataTemplate> 
        <DataGrid ItemsSource="{Binding RightLabel.Components}"       
           CanUserAddRows="False" 
           CanUserDeleteRows="False">       
        </DataGrid> 
       </DataTemplate> 
      </DataGridTemplateColumn.CellTemplate> 
     </DataGridTemplateColumn> 
    </DataGrid.Columns> 
</DataGrid> 

私はできるだけ短いポストを維持するためにモデルコードを掲載していません。

+0

この問題を解決するにはこれが可能ですか?あるいは私は何か間違ったことを試みていて、何らかの変更が必要な場合や、他のコントロールを使用している場合 – Shiva

答えて

0

あなたは、この(私はテストのためのObservableCollectionを使用し、あなたのコンテナを使用する必要があります)のようなコンバータを作成することができます。Do

<DataGridTemplateColumn Header="Left" Width="25*" 
         Visibility={Binding RightLabel.Components, Converter={local:NoElementVisibilityConverter}> 

ない:

public class NoElementVisibilityConverter : MarkupExtension, IValueConverter 
{ 
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture) 
    { 
     if (value == null) 
      return Visibility.Collapsed; 
     ObservableCollection<int> ienum = value as ObservableCollection<int>; 
     return ienum == null || ienum.Count() == 0 ? Visibility.Collapsed : Visibility.Visible; 
    } 

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) 
    { 
     throw new NotImplementedException(); 
    } 

    public override object ProvideValue(IServiceProvider serviceProvider) 
    { 
     if (_converter == null) 
      _converter = new NoElementVisibilityConverter(); 
     return _converter; 
    } 

    private static NoElementVisibilityConverter _converter = null; 
} 

そして、このようなあなたのコラムにそれを使用しますあなたのウィンドウにコンバータの名前空間を含めることを忘れないでください。

+0

返事をありがとう。私はこれを試して更新します。 – Shiva

関連する問題