ОБНОВЛЕНИЕ 1
Речь идет не о «выбрать элемент nTH при запуске» ... это больше похоже на выбор находящегося там элемента, определенного как начальный элемент, и обновление поля со списком. Мне нужно установить ItemsSource как CompositeCollection, где один из элементов определен, как указано (необязательно должен быть элемент 0) и установить упомянутый элемент, выбранный при запуске. Факт привязки к содержанию предмета здесь играет решающую роль. Код ниже просто демонстрирует пример приложения.
КОНЕЦ ОБНОВЛЕНИЯ 1
Я столкнулся с небольшой проблемой, которую, я надеюсь, я смогу найти здесь. У меня есть поле со списком, и я хотел бы инициализировать его с конкретным элементом, выбранным при запуске. Проблема в том, что когда я запускаю приложение, оно становится пустым и получает его значение при первом открытии. Мне удалось извлечь проблемный код в простейшую форму (исключить столько переменных, сколько я мог), и это выглядит следующим образом
XAML-код для окна
<Window
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" mc:Ignorable="d"
xmlns:loc ="clr-namespace:WpfApplication1"
x:Class="WpfApplication1.MainWindow"
x:Name="Window"
Title="MainWindow"
Width="640" Height="480">
<StackPanel Orientation="Vertical">
<StackPanel.Resources>
<ComboBoxItem x:Key="toSelectInitially" Content="{Binding Path=ActiveItem, Mode=OneWay}"/>
</StackPanel.Resources>
<ComboBox SelectedIndex="0"
Height="30">
<ComboBox.ItemsSource>
<x:Array Type="{x:Type ComboBoxItem}">
<ComboBoxItem Content="{Binding Path=ActiveItem, Mode=OneWay}"/>
<ComboBoxItem Content="AAA"/>
<ComboBoxItem Content="BBB"/>
</x:Array>
</ComboBox.ItemsSource>
</ComboBox>
<ComboBox SelectedItem="{StaticResource ResourceKey=toSelectInitially}"
Height="30" Loaded="ComboBox_Loaded">
<ComboBox.ItemsSource>
<x:Array Type="{x:Type ComboBoxItem}">
<StaticResource ResourceKey="toSelectInitially"/>
<ComboBoxItem Content="AAA"/>
<ComboBoxItem Content="BBB"/>
</x:Array>
</ComboBox.ItemsSource>
</ComboBox>
<ComboBox SelectedValue="{Binding Path=ActiveItem, Mode=OneWay}"
SelectedValuePath="Content"
Height="30">
<ComboBox.ItemsSource>
<x:Array Type="{x:Type ComboBoxItem}">
<ComboBoxItem Content="{Binding Path=ActiveItem, Mode=OneWay}"/>
<ComboBoxItem Content="AAA"/>
<ComboBoxItem Content="BBB"/>
</x:Array>
</ComboBox.ItemsSource>
</ComboBox>
</StackPanel>
</Window>
Код:
namespace WpfApplication1
{
/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
public partial class MainWindow : Window
{
public MainWindow()
{
this.InitializeComponent();
this.DataContext = new VMSimple();
}
}
}
Простая модель представления:
using System;
using System.ComponentModel;
namespace WpfApplication1
{
class VMSimple : INotifyPropertyChanged
{
public VMSimple()
{
ActiveItem = string.Concat("Active Item : ", Guid.NewGuid().ToString());
}
private string mActiveItem;
public string ActiveItem
{
get { return mActiveItem; }
private set
{
if (Equals(mActiveItem, value)) return;
mActiveItem = value;
OnPropertyChanged("ActiveItem");
}
}
public event PropertyChangedEventHandler PropertyChanged;
private void OnPropertyChanged(string propertyName)
{
if (PropertyChanged != null)
PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
}
}
Я пытался заставить код копировать-вставить-работать.
Очевидно, что все подходы ведут себя одинаково (выбранное значение, индекс, элемент). Проблема исчезнет, если я установлю список как Items вместо ItemsSource, он работает, но это не вариант. Помните, что это упрощенное представление более сложного кода, где я пытаюсь использовать CompositeCollection, но я заменил его массивом, чтобы проверить, не вызывает ли это проблемы.