按Grid中的行启用/禁用按钮

时间:2013-01-14 07:46:59

标签: c# wpf button grid datatrigger

我有以下代码。这里listClear是一个对象,由ViewModel填充。我正在使用此对象的属性来填充Grid。在下面的代码中,我应该使用哪个属性在Button中禁用DataTrigger。 Button被禁用,否则应该启用它。

Grid

1 个答案:

答案 0 :(得分:2)

您可以使用List Count属性来表示空

示例:

public partial class MainWindow : Window 
{
    private ObservableCollection<string> myVar = new ObservableCollection<string>();

    public MainWindow()
    {
        InitializeComponent();
        MyList.Add("test");
    }

    public ObservableCollection<string> MyList
    {
        get { return myVar; }
        set { myVar = value; }
    }

    private void Button_Click(object sender, RoutedEventArgs e)
    {
        MyList.Clear();
    }

}

的Xaml:

<Window x:Class="WpfApplication11.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:local="clr-namespace:WpfApplication11"
        Title="MainWindow" Height="136.3" Width="208" x:Name="UI">
    <Grid DataContext="{Binding ElementName=UI}">
        <Button Content="Clear" Click="Button_Click">
            <Button.Style>
                <Style TargetType="Button">
                    <Setter Property="IsEnabled" Value="True" />
                    <Style.Triggers>
                        <DataTrigger Binding="{Binding Path=MyList.Count}" Value="0">
                            <Setter Property="IsEnabled" Value="False"/>
                        </DataTrigger>
                    </Style.Triggers>
                </Style>
            </Button.Style>
        </Button>
    </Grid>
</Window>

如果你的IEnumerable<T>仅使用IEnumerable因为public class IsEmptyConverter : IValueConverter { public object Convert(object value, Type targetType, object parameter, CultureInfo culture) { if (value is IEnumerable) { var enumerable = (IEnumerable)value; foreach (var item in enumerable) { return false; } } return true; } public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) { throw new NotImplementedException(); } } 没有任何公共属性,那么你必须制作一个转换器。

像这样的东西

<Window x:Class="WpfApplication11.MainWindow"
        xmlns:local="clr-namespace:Namespace for converter"
....
....
 <Window.Resources>
        <local:IsEmptyConverter x:Key="IsEmptyConverter" />
 </Window.Resources>
....
....
   <DataTrigger Binding="{Binding Path=MyList, Converter={StaticResource IsEmptyConverter}}" Value="true">

的Xaml:

{{1}}