扩展器仅在文件加载后扩展

时间:2019-04-09 04:31:55

标签: c# wpf expander

图片:

Please check the image here

<Expander Grid.Row="1" IsExpanded="False" Background="Yellow">
           <Grid Background="Yellow">
            <Grid.ColumnDefinitions>
                <ColumnDefinition Width="100" />
                <ColumnDefinition Width="100" />
                <ColumnDefinition Width="100" />
                <ColumnDefinition Width="100" />
                <ColumnDefinition Width="100" />
            </Grid.ColumnDefinitions>
            <TextBlock Grid.Column="0" Text="Filters" />
            <CheckBox Grid.Column="1" Content="A"/>
            <CheckBox Grid.Column="2" Content="B"/>
            <CheckBox Grid.Column="3" Content="C"/>
        </Grid>
   </Expander>

我希望我的扩展器仅在加载文件后才扩展。请帮我怎么做。我正在对加载按钮使用命令。

2 个答案:

答案 0 :(得分:2)

YourView.xaml

<Window x:Class="WpfSample.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"                                    
        xmlns:converter="clr-namespace:WpfSample.Converters"
        mc:Ignorable="d"
        Title="MainWindow" Height="450" Width="800">
    <Window.Resources>
        <converter:IntToBoolConverter x:Key="intToBoolConverter"/>
    </Window.Resources>
    <Grid>
        <Expander Header="Main Expander" IsEnabled="{Binding Items, Converter={StaticResource intToBoolConverter}, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" IsExpanded="{Binding Items, Converter={StaticResource intToBoolConverter}, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" Background="Yellow">
            <ItemsControl x:Name="expanderItem" ItemsSource="{Binding Items}" HorizontalContentAlignment="Stretch">
                <ItemsControl.ItemTemplate>
                    <DataTemplate>
                        <Expander Header="Sub-Heading">
                            <ListBox ItemsSource="{Binding Items}" HorizontalContentAlignment="Stretch"/>
                        </Expander>
                    </DataTemplate>
                </ItemsControl.ItemTemplate>
            </ItemsControl>
        </Expander>
    </Grid>
</Window>

我已将商品创建为ObservableCollection<string>。您可以将其更改为模型。

YourViewModel.cs

private ObservableCollection<string> items;
public ObservableCollection<string> Items
{
    get { return items; }
    set { items = value; OnPropertyChanged(); }
}

public void LoadExpanderData(object obj)
{
    Items = new ObservableCollection<string>();
    Items.Add("Item 1");
    Items.Add("Item 2");
    Items.Add("Item 3");
    Items.Add("Item 4");
    Items.Add("Item 5");
}

IntToBoolConverter.cs

public class IntToBoolConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        bool isExpand = false;
        if (value != null && value.GetType().GetProperties().Length > 0)
            return isExpand = true;
        return isExpand;
    }

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
    {
        return true;
    }
}

答案 1 :(得分:1)

这是将Flag绑定到属性IsEnabled的解决方案:

for example you set Flag = True when your file is loaded

MainWindow.xaml.cs:

public partial class MainWindow : INotifyPropertyChanged
{
    public MainWindow()
    {
        InitializeComponent();
        DataContext = this;
    }

    private void ButtonClick(object sender, RoutedEventArgs e)
    {
        Flag = true;
        OnPropertyChanged("Flag");
    }

    public bool Flag { get; set; }

    public event PropertyChangedEventHandler PropertyChanged;
    protected void OnPropertyChanged(string property)
    {
        PropertyChanged(this, new PropertyChangedEventArgs(property));
    }
}

MainWindow.xaml:

<Grid>
    <Grid.RowDefinitions>
        <RowDefinition Height="2*" />
        <RowDefinition Height="1*" />
    </Grid.RowDefinitions>
    <Expander Grid.Row="0" IsExpanded="False" Background="Yellow" Margin="50,50,200,50" >
        <Expander.Style>
            <Style>
                <Setter Property="Expander.IsEnabled" Value="False" />
                <Style.Triggers>
                    <DataTrigger Binding="{Binding Path=Flag}" Value="True">
                        <Setter Property="Expander.IsEnabled" Value="True" />
                    </DataTrigger>
                </Style.Triggers>
            </Style>
        </Expander.Style>
        <Grid Background="Yellow">
          :
          :
        </Grid>
    </Expander>
    <Button Grid.Row="1" Click="ButtonClick" Content="Click Me" />
</Grid>

我玩过IsEnabled,但可以绑定属性IsExpanded:

<Expander Grid.Row="0"  Background="Yellow" Margin="50,50,200,50" >
    <Expander.Style>
        <Style>
            <Setter Property="Expander.IsExpanded" Value="False" />
            <Style.Triggers>
                <DataTrigger Binding="{Binding Path=Flag}" Value="True">
                    <Setter Property="Expander.IsExpanded" Value="True" />
                </DataTrigger>
            </Style.Triggers>
        </Style>
    </Expander.Style>

即使您愿意也可以:

    <Expander Grid.Row="0"  Background="Yellow" Margin="50,50,200,50" >
        <Expander.Style>
            <Style>
                <Setter Property="Expander.IsEnabled" Value="False" />
                <Setter Property="Expander.IsExpanded" Value="False" />
                <Style.Triggers>
                    <DataTrigger Binding="{Binding Path=Flag}" Value="True">
                        <Setter Property="Expander.IsEnabled" Value="True" />
                        <Setter Property="Expander.IsExpanded" Value="True" />
                    </DataTrigger>
                </Style.Triggers>
            </Style>
        </Expander.Style>

在这里,当您单击按钮时,扩展器将变为“展开/启用”