UPDATE 1Выберите первый элемент ComboBox в списке при запуске
Это не о «выберите NTH пункт при запуске» ... это больше похоже выберите элемент, который сидит, там определяется как в качестве исходного пункта и обновить поле со списком. Мне нужно установить ItemsSource как CompositeCollection, где один из элементов определен как заданный (не обязательно должен быть элемент 0) и установить указанный элемент при запуске. Важнейшую роль здесь играет тот факт, что Binding, установленный для Content of the item. В приведенном ниже коде показан пример приложения.
КОНЕЦ UPDATE 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>
Код:
Простые ViewModel:
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));
}
}
}
Я попытался сделать код копирования прошлого е-работа.
Очевидно, что все подходы ведут себя одинаково (выбранное значение, индекс, элемент). Проблема исчезает, если я устанавливаю список как «Элементы» вместо «ItemsSource», но это не вариант. Имейте в виду, что это упрощенная презентация более сложного кода, где я пытаюсь использовать CompositeCollection, но я заменил его массивом, чтобы проверить, не вызывает ли это проблемы.
Вы хотите, чтобы первый элемент будет выбрано по умолчанию? –
Да, я хочу, чтобы этот конкретный элемент был выбран. Поведение заключается в том, что содержимое поля со списком обновляется после того, как я открою его в первый раз, когда запустил приложение. – Skomialek
Хорошо, я вижу, что вы изменили название - я хочу выбрать элемент - в моем примере кода это элемент 0, но это может быть любой индекс, значение и т. Д. Концепция имеет значение - я выбираю элемент (он выбран как свойство , и если я проверил SelectedItem, это верное значение), но содержимое поля со списком не будет обновляться до тех пор, пока я его не открою .... – Skomialek