我的代码上有两个ComboBox
:
<ComboBox Name="comboBoxSelectCamera" ItemsSource="{Binding Path=ListCameras}" SelectionChanged="comboBoxSelectCamera_SelectionChanged" />
<ComboBox Name="comboBoxCities" ItemsSource="{Binding Path=ListCities}" />
在我的身上,Window
我有这段代码,所以ComboBox
了解它的Path
来源:
<Window ....
DataContext="{Binding RelativeSource={RelativeSource Self}}"
.... >
两个组合都绑定到我在我创建的两个列表MainWindow
:
public MainWindow()
{
InitializeCitiesCombo();
InitializeComponent();
// Initialize the control that checks for cameras
InitializeCameraControl();
FillCameraProperties();
DataContext = this;
}
第一个ComboBox
列表是在之前创建的InitializeComponent
,所以当它的组合创建时,它会填充特定的内容。
第二个ComboBox
列表是在之后创建的InitializeComponent
,因为它依赖于加载相机的对象,而且,我不知道是不是这个原因,但是如果列表是在之后 InitializeComponent
创建的,它不会填充ComboBox
.
我知道还有其他方法可以在我的计算机上填写已连接摄像机的列表,但我必须使用InitializeComponent
在InitializeCameraControl()
.
关于我如何ComboBox
在之后填写这个的任何想法InitializeComponent
?
编辑:两个列表的声明:
private List<CameraInfo> ListCameras { get; set; }
private List<String> ListCities { get; set; }
在代码的某处,ListCites
:
ListCities = new List<String> { Madrid, Barcelona, Alicante, Valencia }
在代码中的某处,我的控件返回已连接摄像机的列表(它有效,它有元素,但它们不显示在组合中):
ListCameras = MyUserControl.ConnectedCameras; // this returns a valid list of `CameraInfo`
我的CameraInfo
班级:
public class CameraInfo
{
public CameraInfo(string name, string id);
public static implicit operator string(CameraInfo cameraInfo);
public string Id { get; }
public string Name { get; }
public override string ToString();
}
请注意,在我们讨论这个问题时,我尝试将相机组合更改为DisplayMemberPath
.
绑定错误:
System.Windows.Data Error: 40 : BindingExpression path error: 'Text' property not found on 'object' ''MainWindow' (Name='')'. BindingExpression:Path=Text; DataItem='MainWindow' (Name=''); target element is 'TextBox' (Name=''); target property is 'Template' (type 'ControlTemplate')