我正在尝试从数据库中获取项目列表,并使用ComboBox
填充它
EntityFramework和Prism MVVM,
它是填充项目,但是当我打开
ComboBox
时,文字没有出现?我做了什么 以下代码中有错误。
和
这是实现MVVM模式的正确方法吗?
代码隐藏:
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" />
型:
<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>
答案 0 :(得分:1)
您的代码是正确的,并且有效。在这种情况下绝对不需要ObservableCollection
。我相信你认为ComboBox
是空的,因为你没有选择。尝试添加此项,您应该在分配SpList
时看到第一个条目:
<ComboBox ... SelectedIndex="0" />
答案 1 :(得分:1)
您不应在Content
中设置ContentPresenter
的{{1}}属性:
ControlTemplate