wpf combobox默认值为textBlock

时间:2017-11-08 15:40:29

标签: wpf dynamic combobox default

我需要在组合框中添加默认值'select'。我无法将此值添加到数据库。此位置值是动态的。它基于用户角色显示。我试过不同的方法没有用。请帮忙。

<ComboBox Width="140" ItemsSource="{Binding SecurityContexts, Mode=OneWay}"
                      SelectedItem="{Binding ActiveSecurityContext, Mode=TwoWay}"
                      ToolTip="Working Location">
    <ComboBox.ItemTemplate>
        <DataTemplate>
            <TextBlock Text="{Binding Location}"/>
        </DataTemplate>
    </ComboBox.ItemTemplate>
</ComboBox>

背后的代码是 SecurityContexts = new ObservableCollection(_currentUser.ApplicationSecurityContexts);

public interface IApplicationSecurityContext
{
    IRole Role { get; }
    string Location { get; }
    IEnumerable<string> Budgets { get; }

}

public IApplicationSecurityContext ActiveSecurityContext
    {
        get { return this._currentUser.ActiveSecurityContext; }
        set
        {
            if (this._currentUser.ActiveSecurityContext != value)
            {
                this._currentUser.ChangeActiveSecurityContext(value);

                RaisePropertyChanged("CurrentUser");

                LoadData();
            }
        }
    }

1 个答案:

答案 0 :(得分:0)

您可以使用CompositeCollection

实现目标 你可以这样做。在grid / usercontrol / combobox中定义资源:

    <Grid.Resources>
        <CollectionViewSource x:Key="cvs" Source="{Binding Binding SecurityContexts, Mode=OneWay}" />
        <DataTemplate DataType="{x:Type c:SecurityContexts}">
             <TextBlock Text="{Binding Location}"/>
        </DataTemplate>
    </Grid.Resources>

然后你的组合框项目将是:

<ComboBox.ItemsSource>
   <CompositeCollection>
      <ComboBoxItem>
         <TextBlock Text="select"/>
      </ComboBoxItem>
      <CollectionContainer Collection="{Binding Source= {StaticResource cvs}}"/>
   </CompositeCollection>
 </ComboBox.ItemsSource>

它应该工作。您还需要在资源中为集合定义datatemplate,以定义项目的显示方式

请注意c:c中的c:SecurityContexts是您定义自定义对象的路径