2012-11-21 58 views
1

我有一个DataGrid的一些列定义。行被绑定到ObservableCollection。 网格旁边有一个按钮,该按钮应该是可见或不可见的,具体取决于行数。当有2个(或更多)行时,它应该是可见的。 这个想法是使用DataGrid.Rows.Count或DataGrid.Items.Count。wpf触发器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要显示/隐藏,并绑定到DataGrid中的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