我是WPF的新手.我只想知道如何以编程方式将列和行添加到WPF中的DataGrid.我们过去常常在Windows窗体中执行此操作.创建表列和行,并将其绑定到DataGrid.
我相信WPF DataGrid与ASP.net和Windows形式中使用的有点不同(如果我错了,请纠正我).
我有需要在DataGrid中绘制的行数和列数,以便用户可以编辑单元格中的数据.
我有一个MVVM模式的WPF应用程序.在我的一个观点中,我必须绑定ObservableCollection
到视图.在那个视图中,我有一个ListBox
和一个DataGrid
都绑定到相同ObservableCollection
但做不同的事情,如事件,风格等.
我只需要在时间,我所做的是创建两个用户控件,一个用于显示其中一个控件DataGrid
和其他的ListBox
.我通过ContentControl
在主视图上放置一个类似于这个博客的东西来切换它们.默认视图是DataGrid
,当点击一个按钮时,显示另一个视图(即ListBox
).直到这个工作正常.
还要记住,数据网格列是使用以下链接中描述的解决方案动态生成的.所以当我回去DataGrid
查看它时,在foreach
语句中向数据网格添加列时抛出错误(请参阅上一个链接的答案)
"带有标题'Ord'的DataGridColumn已经存在于a
DataGrid
.的Columns集合中.DataGrids不能共享列,也不能包含重复的列实例."
但我确信在DataGrid
向其Count
属性添加列之前是零(dataGrid.Columns.Count()).那么DataGrid
标题属性如何保持?有没有办法清除标题值?
请建议......
我正在开发wpf(mvvm模式)的产品.我有一个场景,我已经花了一个多星期没有好结果.如果可以,请帮助我......这是场景,根据用户的自定义(用户ll选择列),我必须在datagrid中显示一组数据.目前我正在将带有一组属性的ObservableCollection绑定到datagrid的itemsource.这限制了我固定的列大小.注意:列出了n个列名称供用户选择.如果通过"datagrid.columns.add()"轻松完成后面的代码.在这种情况下,任何人都可以帮助我.
我的xaml:
<my:DataGrid AutoGenerateColumns="False" Margin="357,121.723,82,41" Name="dataGrid3" c:DataGridExtension.Columns="{Binding ColumnCollection}" />
Run Code Online (Sandbox Code Playgroud)
我的命令类:
public static class DataGridExtension
{
public static ObservableCollection<DataGridColumn> GetColumns(DependencyObject obj)
{
return (ObservableCollection<DataGridColumn>)obj.GetValue(ColumnsProperty);
}
public static void SetColumns(DependencyObject obj, ObservableCollection<DataGridColumn> value)
{
obj.SetValue(ColumnsProperty, value);
}
public static readonly DependencyProperty ColumnsProperty =
DependencyProperty.RegisterAttached("Columns", typeof(ObservableCollection<DataGridColumn>),typeof(DataGridExtension),
new UIPropertyMetadata (new ObservableCollection<DataGridColumn>(), OnDataGridColumnsPropertyChanged));
private static void OnDataGridColumnsPropertyChanged(DependencyObject d,
DependencyPropertyChangedEventArgs e)
{
if (d.GetType() == typeof(DataGrid))
{
DataGrid myGrid = d as DataGrid;
ObservableCollection<DataGridColumn> Columns = (ObservableCollection<DataGridColumn>)e.NewValue;
if (Columns != null)
{
myGrid.Columns.Clear();
if (Columns != …
Run Code Online (Sandbox Code Playgroud) 我有3个数据网格共享相同的数据类型.我想配置一次列绑定并让3个datagrids共享资源.
例如
<DataGrid Grid.Row="1" x:Name="primaryDG" ItemsSource="{Binding Path=dgSource AutoGenerateColumns="False">
<DataGrid.Columns>
<DataGridTextColumn Width="Auto" Header="Column 1" Binding="{Binding Path=Col1}"/>
<DataGridTextColumn Width="Auto" Header="Column 2" Binding="{Binding Path=Col2}"/>
<DataGridTextColumn Width="Auto" Header="Column 3" Binding="{Binding Path=Col3}"/>
<DataGridTextColumn Width="Auto" Header="Column 4" Binding="{Binding Path=Col4}"/>
</DataGrid.Columns>
</DataGrid>
Run Code Online (Sandbox Code Playgroud)
有没有办法为每个DataGrid设置ItemsSource,然后使用datatemplate或controltemplate来获取列?
我正在尝试选择以MVVM方式实现此UI的最佳方法.我是WPF的新手(比如2个月),但我有很棒的WinForms经验.
这里的ListBox就像一个TabControl(所以它将视图切换到右边),基本上包含表格中显示的项目类型.所有UI都是动态的(ListBox项,TabItems和Columns在运行时确定).该应用程序的目标是WPF和Silverlight.
ViewModel需要的类:
public abstract class ViewModel : INotifyPropertyChanged {}
public abstract class ContainerViewModel : ViewModel
{
public IList<ViewModel> Workspaces {get;set;}
public ViewModel ActiveWorkspace {get;set;}
}
public class ListViewModel<TItem> where TItem : class
{
public IList<TItem> ItemList { get; set; }
public TItem ActiveItem { get; set; }
public IList<TItem> SelectedItems { get; set; }
}
public class TableViewModel<TItem> : ListViewModel<TItem> where TItem : class
{
public Ilist<ColumnDescription> ColumnList { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
现在的问题是如何将其连接到View.
我可以在这里看到两种基本方法:
ListView<T> : …