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.
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
Du musst angemeldet sein, um einen Kommentar abzugeben.
Hier ist ein komplettes Beispiel, wie ich die erste combobox-Element:
XAML
VIEWMODEL
Wenn Sie möchten, ändern Sie die selectedItem auf etwas anderes als das erste Element in der Liste, dann müssen Sie legen Sie die SelectedItem auf das Objekt in der Liste z.B. SelectedItem=m_ComboItems[1] wird "BB", wie das ausgewählte Element.
Hoffe, das Hilft!
Außerdem, Werte AA, BB sind nicht von der gleichen Liste in diesem Fall (unterschiedlichen Typs) ich weiß, ich könnte mehr generische list (of object) und Daten-Vorlage Pflege der anzeigen von besonderen posten, aber mein Ziel ist es, nicht auf Dinge wie das Trennzeichen aus der view-Modell. Ich möchte VM zu bieten Funktionalitäten und anzeigen, sorgen dafür, dass diese in irgendeiner form 🙂
Hallo, aus Neugier, gibt es einen bestimmten Grund, warum Sie wollen, zu einem CompositeCollection?
Weil ich nicht will, um in voller Menü Inhalt anzeigen von Informationen ist das Modell. Ich weiß, ich könnte tun, aber ich möchte die Ansicht zu entscheiden, wie Befehle,Separatoren, usw. Ich habe "aktuelle Artikel" Liste von view-Modell.Modell bietet ClearList Befehl, activeItem-Objekt (das ist nicht Teil der Liste). Ich wollte viewModel so Abstrakt wie möglich. Als in der Ansicht, die ich vertrete alle, es als eine combobox mit Aktivem Element als erstes Element, Liste der letzten Artikel , separator und der Befehl "clear all" posten.Es ist nicht unlösbar, es ist nur mir gefallen, es auf diese Weise.Es funktioniert nicht und ich will wissen, warum
InformationsquelleAutor emybob
In Fall, dass Sie Ihre erste Element ausgewählt werden, sobald die itemSource bekommen initialisiert für deine combobox, legen Sie die
IsSynchronizedWithCurrentItem
auf true für deine combobox wie diese -InformationsquelleAutor Rohit Vats