我有一个小的ObservableDictionary WPF,它禁用了xamDataGrid中的数据。我已将代码移至使用MVVM的较大项目。该数据未显示在xamdatagrid中。唯一的区别是视图模型是INotifyPropertyChanged
我相信这是一个数据上下文问题,但我不确定如何解决。
如何更改另一个xamDataGrid的DataContext。在这里为整个网格进行设置:
问题出在xamdataGrid(sDataGrid)。
我没有收到任何错误,但将鼠标悬停在DataSource上表示无法解决。
这是xaml的代码段:
<Window
x:Class="Test.View.TestView"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:igDP="http://infragistics.com/DataPresenter"
xmlns:igRibbon="http://infragistics.com/Ribbon"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:Test.View"
xmlns:igWindows="http://infragistics.com/Windows"
xmlns:ig="http://schemas.infragistics.com/xaml"
xmlns:igEditors="http://infragistics.com/Editors"
xmlns:igThemes="http://infragistics.com/Themes"
xmlns:sys="clr-namespace:System;assembly=mscorlib"
xmlns:viewModel="clr-namespace:Test.ViewModel"
mc:Ignorable="d"
Width="1150" Height="1000" Background="Black"
Title="MainWindow"
Loaded="Window_Loaded"
WindowStartupLocation="CenterScreen">
<Window.Resources>
<CollectionViewSource x:Key="categoriesViewSource" d:DesignSource="d:DesignInstance {x:Type local:Categories},CreatList=True}"/>
<CollectionViewSource x:Key="categoriesProductsViewSource" Source="{Binding Products, Source={StaticResource categoriesViewSource}}"/>
</Window.Resources>
<Grid DataContext="{StaticResource categoriesViewSource}" Margin="0,0,0,0">
<Grid.RowDefinitions>
<RowDefinition Height="Auto" MinHeight="0" />
<RowDefinition Height="150"/>
<RowDefinition Height="200"/>
<RowDefinition Height="200"/>
<RowDefinition Height="50"/>
<RowDefinition Height="200"/>
</Grid.RowDefinitions>
<igDP:XamDataGrid x:Name="aDataGrid" Grid.Row="2" DataSource="{Binding}" RecordActivated="categoriesDataGrid_RecordActivated">
</igDP:XamDataGrid>
<igDP:XamDataGrid x:Name="bDataGrid" Grid.Row="3" DataSource="{Binding Source={StaticResource categoriesProductsViewSource}}">
</igDP:XamDataGrid>
<igDP:XamDataGrid x:Name="sDataGrid" Grid.Row="5" DataSource="{Binding RunningStatus,Mode=OneWay}" FontSize="12" >
<igDP:XamDataGrid.FieldLayoutSettings>
<igDP:FieldLayoutSettings AutoGenerateFields="False"/>
</igDP:XamDataGrid.FieldLayoutSettings>
<igDP:XamDataGrid.FieldLayouts>
<igDP:FieldLayout>
<igDP:UnboundField Name="Key" Width="Auto" BindingPath="Key">
<igDP:UnboundField.Settings>
<igDP:FieldSettings AllowEdit="False"/>
</igDP:UnboundField.Settings>
</igDP:UnboundField>
<igDP:UnboundField Name="Status ID" BindingPath="Value.statusID">
<igDP:UnboundField.Settings>
<igDP:FieldSettings AllowEdit="False"/>
</igDP:UnboundField.Settings>
</igDP:UnboundField>
</igDP:FieldLayout>
</igDP:XamDataGrid.FieldLayouts>
</igDP:XamDataGrid>
</Grid>
</Window>
TestView.xaml.cs
namespace Test.View
{
public partial class TestView : Window
{
TestViewModel viewModel;
public ProductContext _context = new ProductContext();
public TestView()
{
viewModel = new TestViewModel();
InitializeComponent();
DataContext = viewModel;
}
private void Window_Loaded(object sender, RoutedEventArgs e)
{
try
{
// some code here
}
catch (Exception ex)
{
}
System.Windows.Data.CollectionViewSource categoriesViewSource = ((System.Windows.Data.CollectionViewSource)(this.FindResource("categoriesViewSource")));
_context.Categories.Where(x => x.CategoryName.Contains("P")).Load();
categoriesViewSource.Source = _context.Categories.Local;
}
}
}
TestViewModel.cs
namespace Test.ViewModel
{
public class TestViewModel : INotifyPropertyChanged
{
public TestViewModel()
{
_runningStatus.Add(1, new Status { statusID = 1, statusMessage = "Failed" });
}
public ObservableDictionary<int, Status> _runningStatus = new ObservableDictionary<int, Status>();
public ObservableDictionary<int, Status> RunningStatus
{
get
{
return _runningStatus;
}
}
}
}
namespace Test.Model
{
public class Status
{
public int statusID { get; set; }
public string statusMessage { get; set; }
}
}
我希望显示ObservableDictionary中的数据。任何帮助将不胜感激。