- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我之前关于检测 VM 中的属性更改的帖子不够深入,所以我发布了这个
我有一个工作网格。每个工作可以有一个或多个员工。
DataGrid 的 RowDetailsTemplate 包含另一个用于显示员工的网格。因此,父网格绑定(bind)到作业列表。内部网格绑定(bind)到 Job 模型上的员工列表。
工作模式:
public class Job : _Base
{
private string _JobName = string.Empty;
public string JobName
{
get { return _JobName; }
set
{
if (_JobName != value)
{
_JobName = value;
RaisePropertyChanged("JobName");
}
}
}
private string _JobNumber = string.Empty;
public string JobNumber
{
get { return _JobNumber; }
set
{
if (_JobNumber != value)
{
_JobNumber = value;
RaisePropertyChanged("JobNumber");
}
}
}
private ObservableCollection<Employee> _Employees;
public ObservableCollection<Employee> Employees
{
get { return _Employees; }
set
{
if (_Employees != value)
{
if (_Employees != value)
{
_Employees = value;
RaisePropertyChanged("Employees");
}
}
}
}
private Employee _SelectedEmployee;
public Employee SelectedEmployee
{
get { return _SelectedEmployee; }
set
{
if (_SelectedEmployee != value)
{
if (_SelectedEmployee != value)
{
_SelectedEmployee = value;
RaisePropertyChanged("SelectedEmployee");
}
}
}
}
public Job()
{
Employees = new ObservableCollection<Employee>();
}
}
public class Employee : _Base
{
private string _EmployeeName = string.Empty;
public string EmployeeName
{
get { return _EmployeeName; }
set
{
if (_EmployeeName != value)
{
_EmployeeName = value;
RaisePropertyChanged("EmployeeName");
}
}
}
private bool _IsChecked = false;
public bool IsChecked
{
get { return _IsChecked; }
set
{
if (_IsChecked != value)
{
_IsChecked = value;
RaisePropertyChanged("IsChecked");
}
}
}
}
<DataGrid ItemsSource="{Binding Jobs}"
SelectedItem="{Binding SelectedJob}"
AutoGenerateColumns="False">
<DataGrid.Columns>
<DataGridTextColumn Header="Job Name" Binding="{Binding JobName}" />
<DataGridTextColumn Header="Job Number" Binding="{Binding JobNumber}" />
</DataGrid.Columns>
<DataGrid.RowDetailsTemplate>
<DataTemplate>
<StackPanel Orientation="Vertical">
<DataGrid ItemsSource="{Binding Employees}"
SelectedItem="{Binding SelectedEmployee}"
AutoGenerateColumns="False">
<DataGrid.Columns>
<DataGridCheckBoxColumn Binding="{Binding IsChecked}"/>
<DataGridTextColumn Binding="{Binding EmployeeName}"/>
</DataGrid.Columns>
</DataGrid>
<Button Margin="5"
Height="23"
Width="75"
HorizontalAlignment="Left"
Content="Remove"/>
</StackPanel>
</DataTemplate>
</DataGrid.RowDetailsTemplate>
</DataGrid>
public class MainWindowViewModel : _Base
{
private ObservableCollection<Job> _Jobs;
public ObservableCollection<Job> Jobs
{
get { return _Jobs; }
set
{
if (_Jobs != value)
{
if (_Jobs != value)
{
_Jobs = value;
RaisePropertyChanged("Jobs");
}
}
}
}
private Job _SelectedJob;
public Job SelectedJob
{
get { return _SelectedJob; }
set
{
if (_SelectedJob != value)
{
if (_SelectedJob != value)
{
_SelectedJob = value;
RaisePropertyChanged("SelectedJob");
}
}
}
}
public MainWindowViewModel()
{
this.PropertyChanged += new PropertyChangedEventHandler(MainWindowViewModel_PropertyChanged);
}
void MainWindowViewModel_PropertyChanged(object sender, System.ComponentModel.PropertyChangedEventArgs e)
{
if (e.PropertyName.Trim().ToLower() == "ischecked")
{
int x = 1;
}
}
}
最佳答案
inside DataGrid's row
,所以上面的 DataGrid 在某种程度上是 eating up the selectionchange for the inner DataGrid
.要解决此问题,您需要强制更新子 DataGrid 的绑定(bind)源。为此,请捕获内部 DataGrid 的 SelectionChanged 事件,并在处理程序中执行以下操作。 private void DataGrid_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
DataGrid grid = e.OriginalSource as DataGrid;
var expression = grid.GetBindingExpression(DataGrid.SelectedItemProperty);
expression.UpdateSource();
}
BindingProxy
在 DataGrid public class MyBindingProxy : Freezable
{
public static readonly DependencyProperty BindingDataProperty =
DependencyProperty.Register("BindingData", typeof(object),
typeof(MyBindingProxy), new UIPropertyMetadata(null));
protected override Freezable CreateInstanceCore()
{
return new MyBindingProxy();
}
public object BindingData
{
get { return (object)GetValue(BindingDataProperty); }
set { SetValue(BindingDataProperty, value); }
}
}
<Window.Resources>
<local:MyBindingProxy x:Key="myproxy" BindingData="{Binding}" />
</Window.Resources>
<Button Margin="5"
Height="23"
Width="75"
HorizontalAlignment="Left"
Content="Remove"
Command="{Binding BindingData.MyCommand, Source={StaticResource myproxy}}"/>
关于WPF DataGrid 与 RowDetailsTemplate 中的 DataGrid,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18986848/
我有一个像上面这样的数据网格。 Datgrid 的行详细信息模板还包含一个数据网格。单击父列的列时填充内部数据网格。我的问题是:
我在我的一个 DataGrids 中使用了 RowDetailsTemplate。到目前为止这工作正常,但当用户想要为特定操作选择多行时看起来真的很奇怪。是否有一种简单的方法可以仅在仅选择一行时显示
xml代码是:
我正在使用 RowDetailsTemplate 来显示一行的嵌套数据网格。现在,当我选择一行来显示这个嵌套的数据网格时,数据网格的高度会扩展。但是当取消选择该行时它不会降低其高度。 在折叠行详细信息
目标 使用 MVVM 标准在 DataGrid 的 RowDetails 模板中添加多个图像。 背景 我有一个带有 DataGrid 的检查窗口,用于保存损坏项目的描述以及检查员的姓名首字母。更重要的
我有一个显示数据的 WPF 数据网格。对于 DataGrid 中显示的每个项目,可以展开该项目以显示使用 RowDetailsTemplate 显示的详细数据。 DataGrid Row 和 RowD
我正在尝试在 WPF DataGrid 的 RowDetailsTemplate 中创建一个 DataGrid。 我有一系列工作。每个工作都可以分配一个或多个员工: public class Job
以下是我的 XAML:
我有一个 DataGrid“嵌套”在另一个 DataGrid 的 RowDetailsTemplate 中。只要我的鼠标悬停在父 DataGrid 上行的主要部分上,滚动就可以正常工作,但是当鼠标悬停
我之前关于检测 VM 中的属性更改的帖子不够深入,所以我发布了这个 我有一个工作网格。每个工作可以有一个或多个员工。 DataGrid 的 RowDetailsTemplate 包含另一个用于显示员工
我有主要的 DataGrid 用于显示文档列表。此 MainGrid 具有在 XAML 中指定的 DataGrid.RowDetailsTemplate。 此 DataGrid.RowDetailsT
我想在另一个 Datagrid 的 RowDetailsTempalte 中使用一个 DataGrid。此内部 Datagrid 应将其列绑定(bind)到外部 Datagrid 中当前对象的属性。例
如果我使用“*”设置 DataGrid(位于 RowDetailesTemplate)列的宽度 - 列缩放不起作用 ...
我有一个 DataGrid其中包含许多对象。在那个 DataGrid 中,我有一个 RowDetailsTemplate容纳所有分层数据。我希望能够从该 DataGrid 中选择对象,但到目前为止,以
我正在使用带有 RowDetails 面板的 WPF Datagrid,其中 RowDetailsVisibilityMode 设置为“VisibleWhenSelected”和 SelectionM
我今天早些时候遇到了这个问题,但找不到解决方案。 SelectedItem的 DataGrid在RowDetailsTemplate里面另一个DataGrid当我在 DataGrid 中选择一行时没有
我正在尝试将 View 模型属性绑定(bind)到 WPF 组合框的“SelectedItem”属性。此组合框位于 DataGrid 的 RowDetailsTemplate 中。绑定(bind)部分
我是一名优秀的程序员,十分优秀!