2012-11-21 2 views
1

일부 열이 정의 된 DataGrid가 있습니다. 행은 ObservableCollection에 바인딩됩니다. Grid 옆에는 행 수에 따라 표시되거나 표시되지 않아야하는 버튼이 있습니다. 2 (또는 그 이상) 행이있을 때 표시되어야합니다. 아이디어는 DataGrid.Rows.Count 또는 DataGrid.Items.Count를 사용하는 것입니다.wpf trigger Datagrid RowCount

"DataGrid.Rows"또는 "DataGrid.Items"속성은 컴파일러에서 알지 못합니다. 다른 방법을 알고 있습니까? 나는 Xaml에서만 그것을 가지고 있고, 이것을 위해 Converter를 사용하지 않는다. (나는 그것이 itemcollection을 세는 변환기로 얻을 수 있음을 안다) 더 똑똑한 방법이 있는가?

<Grid> 

<DataGrid Name="dg1"> 
    <DataGrid.Columns> 
     ... 
    </DataGrid.Columns> 
</DataGrid> 
<Button Name="btn1" Visibility="Visibility"> 
</Button> 
<Grid.Triggers> 
    <Trigger SourceName="dg1" Property="DataGrid.Items.Count" Value="0"> 
     <Setter TargetName="btn1" Property="Visibility" Value="Hidden"></Setter> 
    </Trigger> 
    <Trigger SourceName="dg1" Property="DataGrid.Items.Count" Value="1"> 
     <Setter TargetName="btn1" Property="Visibility" Value="Hidden"></Setter> 
    </Trigger> 
</Grid.Triggers> 

+0

나는 당신이 총 수없는 그 행의 수를 얻을 징 생각합니다. 행 번호 인 컬렉션에 속성을 넣을 수 있습니까? – Paparazzi

답변

1

버튼에 DataTrigger를 설정하여 당신이/숨기기를 보여주고 싶은 것을 수행하고 데이터 그리드에 Items.Count 속성에 바인딩 할 수 있습니다.

컬렉션의 항목 수가 0 또는 1에 도달 할 때마다 단추가 숨겨지고 1이 넘으면 단추가 다시 표시됩니다.

XAML :

<Window x:Class="WpfApplication2.MainWindow" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     Title="MainWindow" Height="350" Width="525"> 
    <StackPanel> 
     <DataGrid Name="dg1" ItemsSource="{Binding MyFooCollection}" AutoGenerateColumns="False"> 
      <DataGrid.Columns> 
       <DataGridTextColumn Binding="{Binding Id}" /> 
       <DataGridTextColumn Binding="{Binding Name}" /> 
      </DataGrid.Columns> 
     </DataGrid> 
     <StackPanel> 
      <Button Content="Add row" Click="btnAdd" /> 
      <Button Content="Remove row" Click="btnRemove" /> 
      <Button Content="Will be shown/hidden"> 
       <Button.Style> 
        <Style TargetType="Button"> 
         <Style.Triggers> 
          <DataTrigger Binding="{Binding Items.Count, ElementName=dg1}" Value="0"> 
           <Setter Property="Visibility" Value="Hidden" /> 
          </DataTrigger> 
          <DataTrigger Binding="{Binding Items.Count, ElementName=dg1}" Value="1"> 
           <Setter Property="Visibility" Value="Hidden" /> 
          </DataTrigger> 
         </Style.Triggers> 
        </Style> 
       </Button.Style> 
      </Button> 
     </StackPanel> 
    </StackPanel> 
</Window> 

코드 숨김

public partial class MainWindow : Window 
{ 
    public ObservableCollection<Foo> MyFooCollection { get; set; } 

    public MainWindow() 
    { 
     InitializeComponent(); 

     this.MyFooCollection = new ObservableCollection<Foo> 
     { 
      new Foo(1, "Bar1"), new Foo(2, "Bar2"), new Foo(3, "Bar3"), 
      new Foo(4, "Bar4"), new Foo(5, "Bar5"), new Foo(6, "Bar6") 
     }; 

     this.DataContext = this; 
    } 

    private void btnAdd(object sender, RoutedEventArgs e) 
    { 
     MyFooCollection.Add(new Foo(11, "Test1")); 
    } 

    private void btnRemove(object sender, RoutedEventArgs e) 
    { 
     if (MyFooCollection.Any()) 
      MyFooCollection.RemoveAt(0); 
    } 

    public class Foo 
    { 
     public int Id { get; set; } 
     public string Name { get; set; } 

     public Foo(int id, string name) 
     { 
      Id = id; 
      Name = name; 
     } 
    } 
} 
+0

잘 작동합니다. 고마워요! – deafjeff