2011-01-09 3 views
1

Привет Я пытаюсь установить значение по умолчанию для comboBox.Значение по умолчанию для comboBox

XAML:

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

Я использую caliburn.Micro. Я связываю List<string, StatusItem> с ComboBox, он работает хорошо.

элемент Статус просто класс, вот это:

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

App.xaml

Я определяю пустую строку в app.xaml

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

statusComboStyle здесь:

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

Но что-то должно быть не так, потому что я получаю эту ошибку компиляции:

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

проверить в триггер данных, если SelectedStatus пустая строка, если значение пустая строка я устанавливаю FRIST элемент в COMBOBOX ,

+0

Что произойдет, если вы не установите 'SelectedIndex' свойство явно? Значение по умолчанию для свойства, к которому вы привязываетесь, должно быть достаточно. – ChrisF

+0

Сеттер для SelectedIndex не будет работать, поскольку, я полагаю, вы привязываетесь к ItemsSource ComboBox. Вместо этого вам нужно сначала установить SelectedStatus в вашей модели представления, как указывает ChrisF. – HappyNomad

ответ

3

Вам не нужно, чтобы создать свою собственную пустую строку, строка имеет статическое поле для того, чтобы вы могли установить его в стиле, как это:

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

А почему бы вам не просто использовать нормальный сеттер в вашем стиле сразу?

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

(Вы должны убедиться, что есть по крайней мере один элемент в ComboBox)

0
Binding="{Binding Path=Name.Length, FallbackValue=0, TargetNullValue=0}" Value="0"> 
Смежные вопросы