Значение по умолчанию для comboBox - PullRequest
1 голос
/ 09 января 2011

Привет. Я пытаюсь установить значение по умолчанию для 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 - пустая строка, если значение - пустая строка, я устанавливаю первый элемент в comboBox.

Ответы [ 2 ]

3 голосов
/ 09 января 2011

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

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

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

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

(Вы должны убедиться, что в ComboBox есть хотя бы один элемент)

0 голосов
/ 24 марта 2014
Binding="{Binding Path=Name.Length, FallbackValue=0, TargetNullValue=0}" Value="0">
...