我刚接触WPF,我在显示记录方面遇到了问题。在显示它们时,我的记录似乎很“害羞”,即使我已经记录了所有记录。
我的App.xaml.cs的代码:
protected override void OnStartup(StartupEventArgs e)
{
base.OnStartup(e);
Window1 window = new Window1();
var viewModel = new Window1ViewModel();
window.PHGrid.ItemsSource = viewModel.ViewModels;
window.Show();
}
Window1ViewModel代码:
public class Window1ViewModel : ViewModelBase
{
private readonly DAPHContrib _contribRepository;
private ObservableCollection<ViewModelBase> _viewModelBases;
public ObservableCollection<ViewModelBase> ViewModels
{
get
{
if (_viewModelBases == null)
{
_viewModelBases = new ObservableCollection<ViewModelBase>();
}
return _viewModelBases;
}
}
public Window1ViewModel()
{
_contribRepository = new DAPHContrib();
//Create instance of our view model to add it in our collection
PHContribViewModel viewModel = new PHContribViewModel(_contribRepository);
ViewModels.Add(viewModel);
}
}
这是我的Window1.xaml 更新:
<Window x:Class="Wabby_App.Views.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:vm="clr-namespace:Wabby_App.ViewModels"
xmlns:v="clr-namespace:Wabby_App.Views"
Title="Utos ng mahal ko"
Height="300"
Width="300">
<Grid>
<DataGrid
AutoGenerateColumns="True"
Height="200"
HorizontalAlignment="Center"
Name="PHGrid"
VerticalAlignment="Center"
Width="200"
ItemsSource="{Binding ViewModels}"/>
</Grid>
输出:
希望你能帮助我。
答案 0 :(得分:1)
你的View(Window1)没有绑定到ViewModel,它只是将控件的ItemsSource设置为ViewModel的一个属性,这是一种实现MVVM的错误方法。您需要做的是将Window1的DataContext设置为ViewModel的实例(将视图绑定到ViewModel)。因此,您需要使用OnStartup
方法更新代码。
<强>从强>
protected override void OnStartup(StartupEventArgs e)
{
base.OnStartup(e);
Window1 window = new Window1();
var viewModel = new Window1ViewModel();
window.PHGrid.ItemsSource = viewModel.ViewModels;
window.Show();
}
以强>
protected override void OnStartup(StartupEventArgs e)
{
base.OnStartup(e);
Window1 window = new Window1();
var viewModel = new Window1ViewModel();
window.DataContext = viewModel;
window.Show();
}
<强>更新强>
您还需要在ViewModel
中将datagrid的ItemsSource属性设置为property<DataGrid ItemsSource={Binding ViewModels} ..
答案 1 :(得分:1)
根据您的评论,您有查看模型集合(ObservableCollection<ViewModelBase>
)
并且在每个视图模型基本实例(PHContribViewModel
)中,您有另一个集合ObservableCollection<PHContrib_Entity>
。
因此,您有两个级别的嵌套集合和一个要映射的数据网格。这不会起作用。为此,您需要将这个2级集合层次结构化为一个ObservableCollection<PHContrib_Entity>
类型的列表。
使用LINQ来做到这一点......
protected override void OnStartup(StartupEventArgs e) {
base.OnStartup(e);
Window1 window = new Window1();
var viewModel = new Window1ViewModel();
window.PHGrid.ItemsSource
= viewModel.ViewModels.SelectMany(vm => vm.PHContribEntities).ToList();
window.Show();
}
如果这有帮助,请告诉我......