首页 > 解决方案 > 带有组合框和 listView 的 UserControl

问题描述

我有一个包含 ListView、Add Button 和 ComboBox 的用户控件。目的是当用户单击 Add 时,将 ComboBox 中的选定项添加到 ListView。

此功能工作正常,但是如果 ComboBox 中的项目被删除列表,因为 ListView 中不允许重复项,那就太好了。目前我在 ViewModel 中处理这个问题,但这意味着我必须为 UserControl 的每个实例实现相同的代码

有谁知道如何为这个问题实施通用解决方案?

<UserControl>

 <Grid >
        <Grid.RowDefinitions>
            <RowDefinition Height="Auto" />
            <RowDefinition Height="Auto" />
        </Grid.RowDefinitions>
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="*" />
        </Grid.ColumnDefinitions>
        <ListView x:Name="ListView"
                  ItemsSource="{x:Bind ListViewItemsSource}"
                  SelectedItem="{x:Bind ListViewSelectedItem, Mode=TwoWay}"
                  ItemTemplate="{x:Bind ListViewItemTemplate}"
                  Style="{x:Bind ListViewStyle}"
                  Margin="{StaticResource MediumBottomMargin}"
                  Visibility="{x:Bind ListViewVisibility, Mode=TwoWay}">

            <ListView.ItemsPanel>
                <ItemsPanelTemplate>
                    <uwptoolkit:WrapPanel Orientation="Horizontal"/>
                </ItemsPanelTemplate>
            </ListView.ItemsPanel>

        </ListView>
        <StackPanel Grid.Row="1"
                    Orientation="Horizontal">
            <ComboBox x:Name="ComboBox" 
                      Style="{StaticResource StandardComboStyleFixedWidth}"
                      ItemsSource="{x:Bind ComboBoxItemsSource, Mode=OneWay}"
                      SelectedItem="{x:Bind ComboBoxSelectedItem, Mode=TwoWay}"
                      DisplayMemberPath="{x:Bind ComboBoxDisplayMemberPath}"
                      PlaceholderText="{x:Bind ComboBoxPlaceholderText}"
                      BorderBrush="{x:Bind ComboBoxBorderBrush, Mode=TwoWay}">

                <ItemsControl.ItemsPanel>
                    <ItemsPanelTemplate>
                        <StackPanel Orientation="Vertical" />
                    </ItemsPanelTemplate>
                </ItemsControl.ItemsPanel>

            </ComboBox>

            <Button x:Name="AddButton" 
                    Style="{StaticResource AddButtonStyle}" 
                    Click="AddButton_Click"
                    IsEnabled="{x:Bind AddButtonIsEnabled, Mode=TwoWay}"/>

        </StackPanel>
    </Grid>
</UserControl>

编辑:

我应该补充一点,我没有创建这个类,我继承了它并希望改进它。我将实施建议的样式更改。

我所说的代码背后的意思是:

                <uc:ListTagControl                             
                               ComboBoxItemsSource="{x:Bind _viewModel.TypeItems, Mode=TwoWay}"
                               ComboBoxSelectedItem="{x:Bind _viewModel.SafetyType, Mode=TwoWay}"
                               ComboBoxDisplayMemberPath="Type"
                               ListViewSelectedItem="{x:Bind _viewModel.SelectedListViewItem, Mode=TwoWay}"
                               ListViewItemsSource="{x:Bind _viewModel.Safeties, Mode=TwoWay}"
                               AddButtonOnClick="{x:Bind _viewModel.AddType}"
                               AddButtonIsEnabled="True" />

在 ViewModel 中,它将执行此操作,以从组合框中删除该项目:

        TypeItems.Remove(TypeItems
            .Where(i => i.Id == _Safety.SafetyType.Id).Single());

我想将此作为通用实现移至 xaml.cs

标签: c#listviewuwp

解决方案


推荐阅读