ComboBox
私のコードには2つあります:
<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}}"
.... >
両方のコンボは、自分で作成した 2 つのリストにバインドされていMainWindow
ます。
public MainWindow()
{
InitializeCitiesCombo();
InitializeComponent();
// Initialize the control that checks for cameras
InitializeCameraControl();
FillCameraProperties();
DataContext = this;
}
最初のComboBox
リストはの前に作成されるInitializeComponent
ため、そのコンボが作成されると、特定のコンテンツで埋められます。
2 番目の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')