如何仅在xaml

时间:2019-02-04 10:32:37

标签: c# wpf xaml listview

要分成组,我在xaml中有以下代码:

<ListView x:Name="lvPallets" ItemsSource="{Binding Entries}">
    <ListView.ItemTemplate>
        <DataTemplate>
            <WrapPanel>
                <Image Source="{Binding Image}"/>
                <TextBlock Text="{Binding Name}" Margin="5,5,5,5" VerticalAlignment="Center" />
            </WrapPanel>
        </DataTemplate>
    </ListView.ItemTemplate>
    <ListView.GroupStyle>
        <GroupStyle>
            <GroupStyle.HeaderTemplate>
                <DataTemplate>
                    <TextBlock FontWeight="Bold" FontSize="14" Text="{Binding Name}"/>
                </DataTemplate>
            </GroupStyle.HeaderTemplate>
        </GroupStyle>
    </ListView.GroupStyle>
</ListView>

要实际上分成几组,我在文件后面的代码中添加了x:Name属性和一些代码:

public SimulationWindow()
{
    InitializeComponent();

    _viewModel = new SimulationWindowViewModel();
    DataContext = _viewModel;

    lvPallets.Loaded += foo;
}

void foo(object sender, EventArgs e)
{
    CollectionView view = (CollectionView)CollectionViewSource.GetDefaultView(lvPallets.ItemsSource);
    PropertyGroupDescription groupDescription = new PropertyGroupDescription("Group");
    view.GroupDescriptions.Add(groupDescription);
}

我想删除x:Name属性和函数foo。我该怎么办?

1 个答案:

答案 0 :(得分:3)

可以在CollectionViewSource中定义XAML,只需在父项的Resources中定义并通过x:Key使用即可。

<!-- Define CollectionViewSource -->
<Parent.Resources>
    <CollectionViewSource x:Key="GroupCVS" Source="{Binding Entries}">
        <!-- Group by the Property 'Group' -->
        <CollectionViewSource.GroupDescriptions>
            <PropertyGroupDescription PropertyName="Group" />
        </CollectionViewSource.GroupDescriptions>
    </CollectionViewSource>
</Parent.Resources>

<!-- use the CollectionViewSource -->
<ListView ItemsSource="{Binding Source={StaticResource GroupCVS}}">

注意:我还没有找到直接在CollectionViewSource中声明ListView的方法,因为必须在应用(-> StaticResource)之前知道它。