相关疑难解决方法(0)

以编程方式将列和行添加到WPF Datagrid

我是WPF的新手.我只想知道如何以编程方式将列和行添加到WPF中的DataGrid.我们过去常常在Windows窗体中执行此操作.创建表列和行,并将其绑定到DataGrid.

我相信WPF DataGrid与ASP.net和Windows形式中使用的有点不同(如果我错了,请纠正我).

我有需要在DataGrid中绘制的行数和列数,以便用户可以编辑单元格中的数据.

c# wpf datagrid silverlight-2.0 wpf-controls

68
推荐指数
5
解决办法
23万
查看次数

带有标题'*'的DataGridColumn已存在于DataGrid的Columns集合中

我有一个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标题属性如何保持?有没有办法清除标题值?

请建议......

c# wpf mvvm wpfdatagrid

12
推荐指数
1
解决办法
1611
查看次数

是否有可能在mvvm模式中获取wpf 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)

c# wpf datagrid mvvm

11
推荐指数
1
解决办法
2万
查看次数

我可以在DataGrid表中共享DataGrid.Columns

我有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来获取列?

wpf

9
推荐指数
1
解决办法
1983
查看次数

使用MVVM模式的UI设计

我正在尝试选择以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.

我可以在这里看到两种基本方法:

  • 使用XAML:由于XAML缺乏泛型支持,我将失去强类型.
  • 没有XAML:我可以重用它 ListView<T> : …

c# silverlight wpf xaml mvvm

5
推荐指数
1
解决办法
2371
查看次数