このデータグリッド ビューにデータを表示させるのに苦労しています。他のいくつかの StackOverflow フォーラム投稿の提案に従いましたが、コンテンツを表示させることができませんでした。
<DataGrid
x:Name="DataGridEmployees"
DataContext="{Binding RelativeSource={RelativeSource AncestorType=Window}}"
ItemsSource="{Binding GridView}"
AutoGenerateColumns="True"
Loaded="dataGrid1_Loaded"
Margin="0,2,0,-2" Grid.ColumnSpan="2">
<DataGrid.Columns>
<DataGridTextColumn Header="EmployeeId" Width="175" Binding="{Binding Id}"></DataGridTextColumn>
<DataGridTextColumn Header="Title" Width="175" Binding="{Binding Title}"></DataGridTextColumn>
<DataGridTextColumn Header="WorkStatus" Width="175" Binding="{Binding WorkStatus}"></DataGridTextColumn>
<DataGridTextColumn Header="FullName" Width="175" Binding="{Binding FullName}"></DataGridTextColumn>
</DataGrid.Columns>
</DataGrid>
これは、xaml.cs ファイル内の別のウィンドウから発生するクリック イベントです (これが問題の原因となっている可能性があります)。
public partial class MainMenu : Window
{
WpfSampleEntities2 _context = new WpfSampleEntities2();
public MainMenu()
{
InitializeComponent();
}
private void Button_Click_1(object sender, RoutedEventArgs e)
{
EmployeeDetails ed = new EmployeeDetails();
ed.DataContext = ed.DomainEmployees;
Binding bin = new Binding("GridView");
bin.Source = ed.DomainEmployees;
foreach (var item in ed.DomainEmployees)
{
bin.Path.PathParameters.Add(item);
}
ed.Show();
}
}
EmployeeDetails.cs
そして、クラス/VMは次のとおりです。
[TypeConverter(typeof(DataGridTextColumn))]
public class MVVMEmployee : Employee
{
public int Id { get; set; }
public string FullName { get; set; }
public string Title { get; set; }
public string WorkStatus { get; set; }
public MVVMEmployee() { }
public MVVMEmployee(int id, string fullName, string title, string workStatus)
{
this.Id = id;
this.FullName = fullName;
this.Title = title;
this.WorkStatus = workStatus;
}
}
私は次のようにも試しましたXAML
:
<DataGrid
x:Name="DataGridEmployees"
DataContext="{Binding RelativeSource={RelativeSource AncestorType=Window}}"
ItemsSource="{Binding GridView}"
AutoGenerateColumns="True"
Loaded="dataGrid1_Loaded"
Margin="0,2,0,-2" Grid.ColumnSpan="2">
<DataGrid.Columns>
<DataGridTextColumn Header="EmployeeId" Width="175" Binding="{Binding ElementName=Id}" ></DataGridTextColumn>
<DataGridTextColumn Header="Title" Width="175" Binding="{Binding ElementName=Title}"></DataGridTextColumn>
<DataGridTextColumn Header="WorkStatus" Width="175" Binding="{Binding ElementName=WorkStatus}"></DataGridTextColumn>
<DataGridTextColumn Header="FullName" Width="175" Binding="{Binding ElementName=FullName}"></DataGridTextColumn>
</DataGrid.Columns>
</DataGrid>
ベストアンサー1
私は、ICollectionView私のモデルビュークラスでは、私のウィンドウまたはそれ以上のインターフェース
例を挙げますメインウィンドウ.xaml.csこのクラスは、コード ビハインドを介してこのようなインターフェイス クラスにデータを追加する方法を示しています。
using System.Collections.Generic;
using System.ComponentModel;
using System.Windows;
using System.Windows.Data;
using System.Windows.Input;
namespace WpfAppTest
{
public partial class MainWindow : Window
{
public ICollectionView MyMVVMEmployeeList { get; private set; }
public MainWindow()
{
InitializeComponent();
}
private void Button_Click(object sender, RoutedEventArgs e)
{
List<MVVMEmployee> list = new List<MVVMEmployee>();
list.Add(new MVVMEmployee(23, "foomaster", "dr", "busy"));
list.Add(new MVVMEmployee(42, "author", "mister", "dead"));
MyMVVMEmployeeList = CollectionViewSource.GetDefaultView(list);
//we call update gui //not needed when using modelview in pure mvvm
DataContext = this;
}
}
}
バインディングのメインウィンドウ.xamlすると次のようになります:
<Window x:Class="WpfAppTest.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:WpfAppTest"
mc:Ignorable="d"
DataContext="MainWindow"
Title="MainWindow" Height="450" Width="800">
<!-- for mvvm pattern using the model for datacontext deps e.g. like -->
<!-- DataContext="{Binding Main,Source={StaticResource Locator}}"> -->
<Grid>
<StackPanel Orientation="Vertical">
<DataGrid x:Name="DataGridEmployees"
ItemsSource="{Binding MyMVVMEmployeeList }"
AutoGenerateColumns="False">
<DataGrid.Columns>
<DataGridTextColumn Header="EmployeeId" Width="175" Binding="{Binding Id}" ></DataGridTextColumn>
<DataGridTextColumn Header="Title" Width="175" Binding="{Binding Title}"></DataGridTextColumn>
<DataGridTextColumn Header="WorkStatus" Width="175" Binding="{Binding WorkStatus}"></DataGridTextColumn>
<DataGridTextColumn Header="FullName" Width="175" Binding="{Binding FullName}"></DataGridTextColumn>
</DataGrid.Columns>
</DataGrid>
<Button Content="add" HorizontalAlignment="Left" Click="Button_Click"/>
</StackPanel>
</Grid>
</Window>
ここで完全に実行可能にするには、データクラスMVVM従業員.cs基本クラスを参照せずに再度実行します。
namespace WpfAppTest
{
public class MVVMEmployee
{
public int Id { get; set; }
public string FullName { get; set; }
public string Title { get; set; }
public string WorkStatus { get; set; }
public MVVMEmployee() { }
public MVVMEmployee(int id, string fullName, string title, string workStatus)
{
this.Id = id;
this.FullName = fullName;
this.Title = title;
this.WorkStatus = workStatus;
}
}
}
名前空間WpfAppTestを変更してください上記の例を含めながら、コード ビハインドを使用せず、モデル ビュー クラスで MyMVVMEmployeeList を同じように使用して、MVVM パターンにさらに従うことをお勧めします。