带有组合框和listView的UserControl

时间:2019-07-17 15:32:36

标签: c# listview uwp

我有一个用户控件,其中包含一个ListView,“添加”按钮和一个ComboBox。目的是当用户单击“添加”时,将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

0 个答案:

没有答案