c# - 带有组合框和 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
解决方案
推荐阅读
- security - 金融科技公司所需的认证
- swift - 如何使用 IPad 从 IPad 上的 View Image 获取点云(RGB,设备上的 2D 坐标,3D 点的坐标)?
- python - 防止exec内部python中的无限循环
- angular11 - 无法在 HTML (Angular) 上使用
- c# - Webservice XML 解析错误:找不到根元素位置:http://localhost/Service1.svc 第 1 行,第 1 列:^
- crm - Microsoft Dynamics CRM CrmServiceClient 性能问题 (DisableCrossThread)
- sql - 串联的动态 SQL 列
- web - 在另一个网站上更改源代码可以吗?
- google-cloud-platform - 使用带有内置地理编码器类的 Google Script 进行 addr 到 (lat, lon) 的转换;错误每日限制。获得 Geocoding API 密钥,Geocoder dox 中没有提及
- html - css 中的 %unit 在我的示例代码中不起作用