WPF ComboBox itemsSource не работает в Prism MVVM - PullRequest
0 голосов
/ 13 июня 2018

Я пытаюсь получить список элементов из БД и заполнить его в ComboBox, используя EntityFramework и Prism MVVM,

он заполняет элементы, но текст не появляется при открытии ComboBox?я сделал что-то не так в приведенном ниже коде.

И

Это правильный способ реализации шаблона MVVM?


пожалуйста, найдите UPDATE1 ниже:

CodeBehind:

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

Модель:

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

ViewModel:

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

ОБНОВЛЕНИЕ1

СТИЛЬ:

<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 голосов
/ 13 июня 2018

Не следует устанавливать свойство Content для ContentPresenter в ControlTemplate:

<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" />
                </Border>
                <ControlTemplate.Triggers>
                    <Trigger Property="IsHighlighted" Value="true">
                        <Setter TargetName="Border" Property="Background" Value="#B1B1B1"/>
                    </Trigger>
                </ControlTemplate.Triggers>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>
0 голосов
/ 13 июня 2018

Ваш код правильный и работает.Определенно нет необходимости в ObservableCollection в этом случае.Я полагаю, вы думаете, что ComboBox пусто, так как у вас нет выбора.Попробуйте добавить это, и вы должны увидеть первую запись при назначении SpList:

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