c# - 使用 WPF 减少重复
问题描述
我有这个代码截图
DockPanel Margin="3"
HorizontalAlignment="Stretch" >
<Label
Content="Port #1"
DockPanel.Dock="Left"/>
<ComboBox
x:Name="Port1"
ItemsSource="{Binding PortList}"
SelectedItem="{Binding Port1Selected}">
</ComboBox>
</DockPanel>
<DockPanel Margin="3"
HorizontalAlignment="Stretch" >
<Label
Content="Port #2"
DockPanel.Dock="Left"/>
<ComboBox
ItemsSource="{Binding PortList}"
SelectedItem="{Binding Port2Selected}"/>
</DockPanel>
如您所见,除了属性DockPanels
之外,还有两个基本相同。SelectedItem
目前我有 8 个我复制的,但似乎复制和粘贴太多,容易出错,将来我可能会有更多端口,所以我需要创建一个新的 DockPanel
.
甚至有更复杂的控制,我需要“复制”。
我试图让自定义控件包含<DockPanel> /// </DockPanel >
部分,但我不知道要实现相同的功能并具有相同的绑定
我的问题是,我如何在没有声誉的情况下实现这一目标。
更新
我的项目控制器
<ItemsControl ItemsSource="{Binding PortList}">
<ItemsControl.ItemTemplate>
<DataTemplate>
<DockPanel HorizontalAlignment="Stretch"
Margin="3">
<Label
Content="{Binding PortName}"
DockPanel.Dock="Left"/>
<ComboBox
ItemsSource="{Binding PortList}"
SelectedItem="{Binding SelectedPort}"/>
</DockPanel>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
我的端口模型
public class PortModel : BindableBase
{
public string PortName { get; set; }
public List<string> PortList { get; set; }
// public string SelectedPort { get; set; }
private string _selectedPort;
public string SelectedPort
{
get { return _selectedPort; }
set { SetProperty(ref _selectedPort, value); }
}
}
和我在视图模型中的主要列表#region List Properties
private ObservableCollection<PortModel> portsList;
public ObservableCollection<PortModel> PortList
{
get { return portsList; }
set { SetProperty(ref portsList, value); }
}
并将项目添加到列表中
private void LoadSerialPorts()
{
portsList.Clear();
for (int i = 0; i < Constants.NUMBER_OF_COMS; i++)
{
PortList.Add(new PortModel
{
PortList = serialPortHandler.GetSerialPortPort().ToList(),
PortName = $"Port #{i}",
});
}
}
但现在选定的端口不会触发
解决方案
推荐阅读
- c++ - 在调用基类之前需要在成员上调用方法
- excel - WEBSERVICE 功能在 Excel 2013 上不起作用
- python - 如何修复“TypeError:只能将列表(不是“str”)连接到列表”错误
- django - 当我在接收 post_save 的函数中使用 save 时,如何防止 Django 对象发送信号?
- r - 选择第一个字母并进行比较
- elixir - 使用 Flow 在 Elixir 中生成前 100000 / 100 万个斐波那契项的总和
- c# - 我有一个 Textbox.Text 内容为 1+1。如何将其转换为双精度并将其存储在 i 中?
- mysql - RDS Read Replica Slave 上的 Mysqldump 慢了 50 倍
- javascript - jQuery slideDown 和 slideUp 没有动画
- python - 这个数据的类型是什么?