- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个 DataGrid 前端代码如下:
<DataGrid ItemsSource="{Binding DTDisplayData}" x:Name="dgReport"
attached:DataGridColumnsAttched.BindableColumns="{Binding ColumnCollection}"
AutoGenerateColumns="False" CanUserDeleteRows="False" IsReadOnly="False"
CanUserSortColumns="True" CanUserAddRows="False" Grid.Row="8" Grid.Column="0" Grid.ColumnSpan="3" BorderBrush="#89000000" BorderThickness="1"
>
<DataGrid.Style>
<Style TargetType="DataGrid" BasedOn="{StaticResource MaterialDesignDataGrid}">
<Style.Triggers>
<DataTrigger Binding="{Binding SelectedBox}" Value="{x:Null}">
<Setter Property="Visibility" Value="Collapsed"></Setter>
</DataTrigger>
</Style.Triggers>
</Style>
</DataGrid.Style>
</DataGrid>
在后端 .CS 代码中附加了一个类:
public class DataGridColumnsAttched
{
public static readonly DependencyProperty BindableColumnsProperty =
DependencyProperty.RegisterAttached("BindableColumns",
typeof(ObservableCollection<DataGridColumnMetaData>),
typeof(DataGridColumnsAttched),
new UIPropertyMetadata(null, BindableColumnsPropertyChanged));
private static void BindableColumnsPropertyChanged(DependencyObject source, DependencyPropertyChangedEventArgs e)
{
DataGrid dataGrid = source as DataGrid;
ObservableCollection<DataGridColumnMetaData> columns = e.NewValue as ObservableCollection<DataGridColumnMetaData>;
dataGrid.Columns.Clear();
if (columns == null)
{
return;
}
foreach (DataGridColumnMetaData column in columns)
{
dataGrid.Columns.Add(CreateColumnFromMetaData(column));
}
columns.CollectionChanged += (sender, e2) =>
{
NotifyCollectionChangedEventArgs ne = e2 as NotifyCollectionChangedEventArgs;
if (ne.Action == NotifyCollectionChangedAction.Reset)
{
dataGrid.Columns.Clear();
if(ne.NewItems != null)
{
foreach (DataGridColumnMetaData column in ne.NewItems)
{
dataGrid.Columns.Add(CreateColumnFromMetaData(column));
}
}
}
else if (ne.Action == NotifyCollectionChangedAction.Add)
{
foreach (DataGridColumnMetaData column in ne.NewItems)
{
dataGrid.Columns.Add(CreateColumnFromMetaData(column));
}
}
else if (ne.Action == NotifyCollectionChangedAction.Move)
{
dataGrid.Columns.Move(ne.OldStartingIndex, ne.NewStartingIndex);
}
else if (ne.Action == NotifyCollectionChangedAction.Remove)
{
foreach (DataGridColumnMetaData column in ne.OldItems)
{
dataGrid.Columns.Remove(CreateColumnFromMetaData(column));
}
}
else if (ne.Action == NotifyCollectionChangedAction.Replace)
{
dataGrid.Columns[ne.NewStartingIndex] = ne.NewItems[0] as DataGridColumn;
}
};
}
public static void SetBindableColumns(DependencyObject element, ObservableCollection<DataGridColumn> value)
{
element.SetValue(BindableColumnsProperty, value);
}
public static ObservableCollection<DataGridColumn> GetBindableColumns(DependencyObject element)
{
return (ObservableCollection<DataGridColumn>)element.GetValue(BindableColumnsProperty);
}
public static DataGridColumn CreateColumnFromMetaData(DataGridColumnMetaData columnMetaData)
{
DataGridColumn newColumn;
switch (columnMetaData.Type)
{
case SuperTapiModel.ColumnType.DataGridTextColumn:
{
DataGridTextColumn dgcText = new DataGridTextColumn();
//set parameters....
newColumn = dgcText;
}
break;
case SuperTapiModel.ColumnType.DataGridTemplateColumn:
{
DataGridTemplateColumn dgcTemplate = new DataGridTemplateColumn();
newColumn = dgcTemplate;
}
break;
case SuperTapiModel.ColumnType.DataGridHyperlinkColumn:
{
DataGridHyperlinkColumn dgcHyperlink = new DataGridHyperlinkColumn();
newColumn = dgcHyperlink;
}
break;
case SuperTapiModel.ColumnType.DataGridComboBoxColumn:
{
DataGridComboBoxColumn dgcComboBox = new DataGridComboBoxColumn();
newColumn = dgcComboBox;
}
break;
case SuperTapiModel.ColumnType.DataGridCheckBoxColumn:
{
DataGridCheckBoxColumn dgcCheckBox = new DataGridCheckBoxColumn();
newColumn = dgcCheckBox;
}
break;
default:
{
DataGridTextColumn dgcText = new DataGridTextColumn();
//set parameters....
newColumn = dgcText;
}
break;
}
return newColumn;
}
}
我想编辑数据网格中的数据,我假设我必须在编辑单元格时捕获编辑事件 PropertyChanged
。
然后,我想在后端.CS代码中设置参数EditingElementStyle
。
如何使用 WPF 和 MVVM 实现它?
值得一提的是,我的代码源是基于 MaterialDesign 主题的,我认为它缺少一些我可以玩的资源。
非常感谢任何帮助!
最佳答案
对于问题的第一部分,即编辑部分,您必须将列的“绑定(bind)”属性绑定(bind)到您希望在用户编辑单元格时修改的相关 ViewModel 属性。由于您是从 .cs 文件创建列,因此您可以这样做:
case SuperTapiModel.ColumnType.DataGridTextColumn:
{
DataGridTextColumn dgcText = new DataGridTextColumn();
dgcText.Binding = new Binding("The name of the property");
newColumn = dgcText;
}
break;
请注意,我以前从未真正这样做过,所以语法可能有点不同,但你明白了。
对于第二部分,设置 EditingElementStyle,您将执行与绑定(bind)相同的操作。在 Xaml 文件中创建您的样式,然后使用 FindResource 方法在 .cs 文件中设置 EditingElementStyle 的值。它看起来像这样:
case SuperTapiModel.ColumnType.DataGridTextColumn:
{
DataGridTextColumn dgcText = new DataGridTextColumn();
dgcText.EditingElementStyle = FindResource("YourResourceKey") as Style;
newColumn = dgcText;
}
break;
希望对您有所帮助!
关于c# - 使用 WPF MVVM 更新带有附加行为的 DataGrid 控件(MaterialDesign 主题)绑定(bind)的数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58854919/
我正在使用 mahapp 和 materialdesign 开发桌面应用程序。我试图在同一个用户控件中有两个不同的对话框。它们看起来像这样: 为了简单起见,我删除了大部分代码。当我尝试像
我试图弄清楚如何在 AngularJS Material 设计中的页面之间进行路由。 在此示例中,我想在单击侧边栏链接时更改页面 http://codepen.io/kyleledbetter/pen
我不知道为什么,但我的 ColorZone 正在自行改变高度。当我没有 materialDesign:ColorZone 时,包含我所有元素的网格的大小为 "*"。 但是当我添加 ColorZone
我想将数据网格中的选定行显示到文本框中,所以我得到了这个视频:https://www.youtube.com/watch?time_continue=127&v=SDUt4y-H-nw .我一步一步跟
我想为控件添加悬停效果(更改边框或背景颜色即可)。我找到了很多关于它的答案,比如这个: WPF: On Mouse hover on a particular control, increase it
我在应用程序的主题中设置了一个自定义的黑色后退箭头,以便在工具栏上显示为“homeasupindicator”-(我有一个用于 v21 的 themes.xml 文件,还有一个用于所有较低版本的通用
我正在寻找一种简单直观的方式来设计 CSS/JS View 转换,如 Goolges MD 指南中的示例所示:https://material-design.storage.googleapis.co
我使用 TextInputEditText 和 Kotlin 。我尝试以编程方式更改提示。但它只是在盒子里改变了。当我写东西时向上移动时添加 - 上面的提示不显示。 我在 onCreate 中使用这段
我尝试使用 jQuery 附加一个带有 float 标签的新文本,但我附加的文本字段没有动画。 如何使其动画化? 这是我的 jQuery 代码: $('body').on('keypress', '.
在最新版本的 MaterialDesign WPF 中出现了这个问题。 有没有什么属性(property)或别的东西可以隐藏它? MaterialDesignThemes 版本 4.0.0 Mater
在最新版本的 MaterialDesign WPF 中出现了这个问题。 有没有什么属性(property)或别的东西可以隐藏它? MaterialDesignThemes 版本 4.0.0 Mater
我正在尝试更改 Material Design 文本字段中文本的顶部填充和底部填充。 我已经尝试应用形状和排版方案,但没有效果。 这是我的代码: // Outlet @IBOutlet weak va
我正在尝试使用com.github.navasmdc:MaterialDesign:1.5,但它给我一个错误,说: Could not resolve com.github.navasmdc:Mate
我从 Ajax、jQuery 等开始,如果我在这里犯了愚蠢的错误,我深表歉意。我正在使用 PHP/JS 构建网站,并使用 Google 的 Material Design 组件和 CSS:https:
我有一个登录按钮,我想在登录过程发生时应用不确定的进度外观。 这是按钮的 XAML: LOGIN 所以我想我可以将我的 View 模型上的 bool 属性绑定(bind)到 materia
My wpf design 我想做的是当我点击芯片时,我希望它以编程方式将新芯片添加到 StackPanel,但问题是如何在代码和控制主题中访问或调用 materialDesign 组件? 例如: p
我有一个名为 NewScaleRangeCalibrationControl 的控件和一个名为 NewScaleRangeCalibrationControlViewModel 的控件的 View 模
我有一个 DataGrid 前端代码如下:
我是一名优秀的程序员,十分优秀!