我希望有人能善良地引导我朝正确的方向前进。 我正在努力使自己了解WPF。 我已经在主窗口上创建了一个带有两个按钮和一个框架的4.8框架应用程序。我正在使用Caliburn.Micro进行绑定–这是我的测试应用程序,用于尝试并理解它。 当您按第一个按钮时,窗口上下文将设置为页面,并在页面上带有“雇员”数据网格。数据是从后端Oracle数据库提供的(我正在尝试遵循MVVM模式。)这非常有效。 当您按下另一个按钮时,主窗口将在框架内显示第二页–这次是部门。这很有用。我在页面中有一个未绑定的文本框,该文本框应显示为应有的状态。 我花了两天时间才开始工作的部分是部门的数据网格。它返回空白。
我肯定知道Departments变量正在填充。我已经确认了这两种方式。我已经遍历了代码,可以看到正在填充的值。我还将代码放在了Employee页面的下面,并在数据网格中显示了值。 我也尝试在“部门”页面中显示雇员数据网格,但在运行时也为空白。 尽我所能识别,除了明显的名称更改之外,两页后面的代码是相同的。
这是从我的部门视图模型中获得的:
using Caliburn.Micro;
using DataLibrary;
namespace WpfEmployees.ViewModels
{
public class DepartmentsViewModel : Screen
{
public BindableCollection<DepartmentsModel> Departments { get; set; }
public DepartmentsViewModel()
{
DepartmentsProcessor dp = new DepartmentsProcessor();
Departments = new BindableCollection<DepartmentsModel>(dp.LoadDepartments());
}
}
}
从视图中:
<DataGrid x:Name="Departments" ></DataGrid>
我没有看到任何错误消息,只是一个空白的数据网格。 我们将不胜感激任何关于我可能在哪里寻找错误的建议。
答案 0 :(得分:0)
要使其正常工作: 主窗口:
<Window x:Class="WpfEmployees.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:WpfEmployees"
xmlns:viewmodels="clr-namespace:WpfEmployees.ViewModels"
xmlns:views="clr-namespace:WpfEmployees.Views"
mc:Ignorable="d"
Title="MainWindow" Height="850" Width="650" Loaded="ShowDepartmentsPage">
<Window.Resources>
<DataTemplate x:Name="employeesViewTemplate" DataType="{x:Type viewmodels:EmployeesViewModel}">
<views:EmployeesView DataContext="{Binding}"/>
</DataTemplate
<DataTemplate x:Name="departmentsViewTemplate" DataType="{x:Type viewmodels:DepartmentsViewModel}">
<views:DepartmentsView DataContext="{Binding}"/>
</DataTemplate>
</Window.Resources>
<Grid>
...
<Button x:Name="ShowEmployeesBtn" Content="Employees"
Margin="10 0 0 0" Click="ShowEmployeesPage"/>
<Button x:Name="ShowDepartmentsBtn" Content="Departments"
Margin="10 0 0 0" Click="ShowDepartmentsPage" />
...
<ContentControl Content="{Binding}"/>
</Grid>
</Window>
主窗口类按钮代码
public partial class MainWindow
{
...
private void ShowEmployeesPage(object sender, RoutedEventArgs e)
{
DataContext = new EmployeesViewModel();
}
查看型号代码
public class EmployeesViewModel
...
public ObservableCollection<EmployeesModel> ObEmployees { get; set; }
...
public EmployeesViewModel()
{
EmployeesProcessor ep = new EmployeesProcessor();
ObEmployees = new ObservableCollection<EmployeesModel>
(ep.LoadEmployees());
}
我不知道这是否是最佳路线。它可以工作,但是我对WPF还是陌生的。我希望这就是Ed Plunkett的想法,也许是这样。再次谢谢你,爱德。