Wählen Sie die erste ComboBox-Element in der Liste auf Autostart

UPDATE 1

Es ist nicht das "select-N-te Element auf startup'... es ist mehr wie wählen Sie das ELEMENT, DAS dort sitzt, definiert als das erste Element und erhalten Sie die combo-box aktualisiert. Ich brauche, um ItemsSource als CompositeCollection, wo eines der Elemente, die definiert ist als angegeben (muss nicht sein Element 0), und setzen Sie das entsprechende Objekt ausgewählt, auf start-up. Die Tatsache, Verbindliche Inhalte das Element spielt eine entscheidende Rolle in hier. Der code unten zeigt ein Beispiel für die Anwendung.

ENDE UPDATE 1

Ich angetroffen habe ein kleines Problem, ich hoffe ich konnte die Lösung für hier. Ich habe ein Kombinationsfeld, und ich möchte eine Initialisierung mit bestimmten ausgewählten Element auf Start. Das problem ist, dass wenn ich starten Sie application control leer ist und bekommt seinen Wert auf den ersten öffnen. Ich habe es geschafft, extrahieren Sie den problematischen code die einfachste form möglich (schließt so viele Variablen ein, wie ich konnte) und es sieht wie folgt

XAML-code für das Fenster

<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>

Code hinter :

namespace WpfApplication1
{
///<summary>
///Interaction logic for MainWindow.xaml
///</summary>
public partial class MainWindow : Window
{
    public MainWindow()
    {
        this.InitializeComponent();
        this.DataContext = new VMSimple();
    }
}
}

Einfachen 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));
    }
}
}

Ich habe versucht, den code copy-paste-Arbeit.

Anscheinend alle Ansätze Verhalten sich auf die gleiche (selektierte Wert, index, Element). Problem geht Weg, wenn ich die set-Liste, die als Elemente anstelle von "ItemsSource" es funktioniert, aber dies ist nicht eine option. Beachten Sie, dass diese vereinfachte Darstellung komplexer code, wo ich versuche, CompositeCollection aber ich habe ersetzt es mit einem array zu überprüfen, ob dieser nicht das problem verursacht.

Wollen Sie das erste Element standardmäßig ausgewählt werden?
Ja, ich will dieses bestimmte Element ausgewählt werden. Das Verhalten ist, dass der Inhalt der combo-box wird aktualisiert, sobald ich es öffnen zum ersten mal, dass ich starten Sie die app.
Ok, ich sehe, du hast den Titel ändern - ich will DEN Artikel auswählen - in meinem Beispiel-code es ist Element 0, ABER es kann ein index, Wert etc. Das Konzept ankommt - ich bekomme ausgewählten Element (es ist ausgewählt, als Eigenschaft, und wenn ich die Option SelectedItem es ist der korrekte Wert), SONDERN der Inhalt Kombinationsfeld nicht aktualisiert, bis ich es öffnen ....
HINWEIS : Scheint, wie die Bindung eingestellt auf den Inhalt ankommt... wenn ich Debuggen und hook up zu tun Loaded-Ereignis auf einer der combo-box, als SelectedItem als ComboBoxItem und prüfen Sie auf Inhalt ist Null Ansprüche, aber wenn ich es öffnen ändert sich der Wert (Bindung aufgelöst wird) könnte ich benötigen, um zu spielen mit den bindenden Ausdruck gibt ....

InformationsquelleAutor Skomialek | 2012-01-26

Schreibe einen Kommentar