2011-01-09 16 views
1

Hi Ich versuche, den Standardwert für ComboBox festlegen.Standardwert für ComboBox

XAML:

 <ComboBox Name="StatusCombo" 
        Style="{StaticResource statusComboStyle}" 
        SelectedValuePath="StatusMsg" 
        SelectedValue="{Binding Path=SelectedStatus}"/> 

I caliburn.Micro verwenden. Ich binde List<string, StatusItem> an ComboBox, es funktioniert gut.

Der Status Artikel ist einfach Klasse, hier ist es:

public class StatusItem 
{ 
    public string StatusMsg { get; set; } 
    public BitmapImage StatusImg { get; set; } 
} 

App.xaml

ich leere Zeichenkette in App.xaml

<System:String x:Key="empty"></System:String> 

statusComboStyle definieren hier:

<Style x:Key="statusComboStyle" TargetType="{x:Type ComboBox}"> 
      <Style.Triggers> 
       <DataTrigger Binding="{Binding Path= SelectedStatus}" Value="{StaticResource empty}"> 
        <Setter Property="SelectedIndex" Value="0"/> 
       </DataTrigger> 
      </Style.Triggers> 
     </Style> 

Aber etwas muss falsch sein, weil ich diesen Compiler-Fehler erhalten: Ich habe frist Artikel in comboBox

{"No matching constructor found on type 'System.String'. You can use the Arguments or FactoryMethod directives to construct this type."}

at System.Windows.Markup.XamlReader.RewrapException(Exception e, IXamlLineInfo lineInfo, Uri baseUri) 
at System.Windows.Markup.WpfXamlLoader.Load(XamlReader xamlReader, IXamlObjectWriterFactory writerFactory, Boolean skipJournaledProperties, Object rootObject, XamlObjectWriterSettings settings, Uri baseUri) 
at System.Windows.Markup.WpfXamlLoader.LoadBaml(XamlReader xamlReader, Boolean skipJournaledProperties, Object rootObject, XamlAccessLevel accessLevel, Uri baseUri) 
at System.Windows.Markup.XamlReader.LoadBaml(Stream stream, ParserContext parserContext, Object parent, Boolean closeStream) 
at System.Windows.Application.LoadComponent(Object component, Uri resourceLocator) 
at Spirit.Views.LogOnView.InitializeComponent() in c:\Users\Jan\Documents\Visual Studio 2010\Projects\C#\Pokec_Messenger\ver.beta\Pokec__Messenger\Spirit_Caliburn_Micro_v1.0\Views\LogOnView.xaml:line 1 
at Spirit.Views.LogOnView..ctor() in C:\Users\Jan\Documents\Visual Studio 2010\Projects\C#\Pokec_Messenger\ver.beta\Pokec__Messenger\Spirit_Caliburn_Micro_v1.0\Views\LogOnView.xaml.cs:line 24 

ich überprüfen, in Daten-Trigger wenn SelectedStatus leerer String, wenn der Wert leere Zeichenfolge .

+0

Was passiert, wenn Sie nicht die 'SelectedIndex' Eigenschaft stelle ausdrücklich? Der Standardwert der Eigenschaft, an die Sie binden, sollte ausreichen. – ChrisF

+0

Ein Setter für SelectedIndex wird nicht funktionieren, da, wie ich annehme, Sie an die ItemsSource der ComboBox gebunden sind. Stattdessen müssen Sie SelectedStatus zunächst in Ihrem Ansichtsmodell festlegen, worauf ChrisF hinweist. – HappyNomad

Antwort

3

Sie brauchen nicht Ihre eigene leere Zeichenfolge zu erstellen, hat Zeichenfolge ein statisches Feld für das, so könnte man es im Stil wie folgt festgelegt:

Value="{x:Static System:String.Empty}" 

Und warum Sie nicht nur verwenden Normaler Setter in deinem Stil sofort?

<Style x:Key="statusComboStyle" TargetType="{x:Type ComboBox}"> 
    <Setter Property="SelectedIndex" Value="0"/> 
</Style> 

(Sie sollten sicherstellen, dass es mindestens ein Element in der ComboBox ist)

0
Binding="{Binding Path=Name.Length, FallbackValue=0, TargetNullValue=0}" Value="0">