WPF ComboBox itemsSource在Prism MVVM中不起作用

时间:2018-06-13 00:49:44

标签: wpf mvvm data-binding combobox prism

我正在尝试从数据库中获取项目列表,并使用ComboBox填充它 EntityFramework和Prism MVVM,

  

它是填充项目,但是当我打开ComboBox 时,文字没有出现?我做了什么   以下代码中有错误。

  

这是实现MVVM模式的正确方法吗?

请在下面找到UPDATE1:

代码隐藏:

public MainWindow()
{
    InitializeComponent();
    this.DataContext = new XViewModel();
 }

型号:

public class SpModel
{
    public string SpName { get; set; }
    public string SpID { get; set; }
}

视图模型:

public class XViewModel : BindableBase
{
    private List<SpModel> _spList;
    public List<SpModel> SpList
    {
        get { return _spList; }
        set { SetProperty(ref (_spList), value); }
    }
}

public XViewModel()
{
    FillDefaultData();
}

private void FillDefaultData()
{
    using (JContext dc = new JContext())
    {
        var query = (from sp in dc.Sps
                     select new SpModel()
                     {
                         SpID = sp.SpID.ToString(),
                         SpName = sp.SpName
                     }).ToList();

        if (query != null && query.Count() > 0)
            SpList = query;
    }
}

XAML:

<ComboBox x:Name="ddlSp" Height="38" Padding="2"
          ItemsSource="{Binding SpList}"                                                     
          SelectedValuePath="SpID"          
          DisplayMemberPath="SpName" />

UPDATE1

型:

<Style x:Key="{x:Type ComboBoxItem}" TargetType="{x:Type ComboBoxItem}">
    <Setter Property="SnapsToDevicePixels" Value="true"/>
    <Setter Property="OverridesDefaultStyle" Value="true"/>
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="{x:Type ComboBoxItem}">
                <Border Name="Border"
                        SnapsToDevicePixels="true">
                    <ContentPresenter 
                                      TextBlock.FontSize="14"
                                      TextBlock.Foreground="Black"
                                      TextBlock.FontWeight="Bold">
                        <ContentPresenter.Content>
                            <Grid>

这一行的问题:

<TextBlock Text="{Binding Content}" />

...

                            </Grid>
                        </ContentPresenter.Content>
                    </ContentPresenter>
                </Border>
                <ControlTemplate.Triggers>
                    <Trigger Property="IsHighlighted" Value="true">
                        <Setter TargetName="Border" Property="Background" Value="#B1B1B1"/>
                    </Trigger>
                </ControlTemplate.Triggers>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>

2 个答案:

答案 0 :(得分:1)

您的代码是正确的,并且有效。在这种情况下绝对不需要ObservableCollection。我相信你认为ComboBox是空的,因为你没有选择。尝试添加此项,您应该在分配SpList时看到第一个条目:

<ComboBox ... SelectedIndex="0" />

答案 1 :(得分:1)

您不应在Content中设置ContentPresenter的{​​{1}}属性:

ControlTemplate