将Xceed DataGrid的列属性绑定到viewmodel属性属性

约翰·梅勒

我绑定到一个Xceed DataGridControl(社区版) AutoCreatedColumns

ObservableCollection<ItemViewModel> Items

我想ReadOnly基于Editableviewmodel属性属性标记创建的列的属性。

 class ItemViewModel : ViewModelBase {

     [Editable(false)] 
     public string Id { get; set; }

     string _comment;
     [Editable(true)]
     public string Comment {
         get { return _comment; }
         set {
              _comment = value;
              NotifyOfPropertyChanged(() => Comment);
         }
     // Other properties ...

 }

这可能吗?或者还有另一种方法可以使我参与到该列的创建中,以检查被绑定并以编程方式设置为ReadOnly的属性?

杜尚

我认为最佳的解决方案是ItemsSourceChangeCompleted像这样挂起事件:

void _dataGrid_ItemsSourceChangeCompleted(object sender, EventArgs e)
{
    DataGridControl control = (DataGridControl)sender;
    Type itemType = control.ItemsSource.GetType().GenericTypeArguments[0];
    foreach (var col in control.Columns)
    {
        PropertyInfo propInfo = itemType.GetProperty(col.FieldName);
        if (propInfo != null)
        {
            EditableAttribute editableAttribute = propInfo.GetCustomAttributes().OfType<EditableAttribute>().FirstOrDefault();
            col.ReadOnly = (editableAttribute == null || !editableAttribute.Value);
        }
        else
        {
            col.ReadOnly = false;
        }
    }
}

或者,您可以ReadOnly此处所述将cell属性绑定到您的editable属性

如果知道要显示哪些列,则可以简化上面的解决方案,并ReadOnly像这样绑定column属性:

public class EditableConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        if (value != null)
        {
            PropertyInfo propInfo = value.GetType().GenericTypeArguments[0].GetProperty(parameter.ToString());
            if (propInfo != null)
            {
                EditableAttribute editableAttribute = propInfo.GetCustomAttributes().OfType<EditableAttribute>().FirstOrDefault();
                return (editableAttribute == null || !editableAttribute.Value);
            }
        }
        return false;
    }
    public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        throw new NotImplementedException();
    }
}
<xcdg:DataGridControl.Columns>
    <xcdg:Column FieldName="Id" 
                 ReadOnly="{Binding RelativeSource={RelativeSource Self}, 
                    Path=DataGridControl.ItemsSource, 
                    Converter={StaticResource EditableConverter}, ConverterParameter=Id}" />
    <xcdg:Column FieldName="Comment" 
                 ReadOnly="{Binding RelativeSource={RelativeSource Self}, 
                    Path=DataGridControl.ItemsSource, 
                    Converter={StaticResource EditableConverter}, ConverterParameter=Comment}" />
</xcdg:DataGridControl.Columns>

但是,您也可以自行关闭在代码中AutoCreateColumns定义Columns集合(或者关闭AutoCreateItemProperties并创建自己集合,在DataGridCollectionViewSource其中DataGridItemProperty.IsReadOnly适当地设置每个集合)。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

将Xceed DataGrid的列属性绑定到viewmodel属性属性

来自分类Dev

WPF DataGrid:将集合属性绑定到列

来自分类Dev

将DataGrid列DataTemplate绑定到附加属性

来自分类Dev

将 SFDataGrid 的列绑定到 Xamarin Forms 中的 ViewModel 属性

来自分类Dev

将AngularJS绑定到MVC ViewModel属性

来自分类Dev

将标签绑定到ViewModel属性

来自分类Dev

将viewModel属性绑定到MvvmCross中的view属性

来自分类Dev

将viewModel属性绑定到MvvmCross中的view属性

来自分类Dev

将CollectionViewSource内部的属性绑定到ViewModel的属性

来自分类Dev

将 xceed 数据网格绑定到 list<list<ViewModel>>

来自分类Dev

将DataGrid绑定到ObservableCollection,后者是ListBox的SelectedItem的属性

来自分类Dev

将DataGrid绑定到ObservableCollection,后者是ListBox的SelectedItem的属性

来自分类Dev

将列表中的类的属性从ObservableCollection绑定到Datagrid

来自分类Dev

将WPF datagrid列标题绑定到后面代码中的属性

来自分类Dev

Datagrid将一个对象的多个属性绑定到列

来自分类Dev

将多个CheckBox绑定到ViewModel中的单个属性

来自分类Dev

无法将TreeViewItem的IsSelected属性绑定到ViewModel

来自分类Dev

如何将ListView / CollectionView的DataTemplate绑定到ViewModel属性

来自分类Dev

无法将TreeViewItem的IsSelected属性绑定到ViewModel

来自分类Dev

将XAMLCropControl ImageSource绑定到ViewModel中的ImageSource属性失败

来自分类Dev

将属性绑定到itemssource集合的属性

来自分类Dev

将数字属性绑定到布尔属性

来自分类Dev

将UserControl属性绑定到Window属性

来自分类Dev

将资源属性绑定到DataContext属性

来自分类Dev

将两个XAML元素属性绑定到相同的ViewModel属性不起作用

来自分类Dev

将属性绑定到DataTemplateSelector

来自分类Dev

将属性绑定到现有绑定

来自分类Dev

将数据网格列绑定到动态属性

来自分类Dev

将数据网格列绑定到动态属性

Related 相关文章

  1. 1

    将Xceed DataGrid的列属性绑定到viewmodel属性属性

  2. 2

    WPF DataGrid:将集合属性绑定到列

  3. 3

    将DataGrid列DataTemplate绑定到附加属性

  4. 4

    将 SFDataGrid 的列绑定到 Xamarin Forms 中的 ViewModel 属性

  5. 5

    将AngularJS绑定到MVC ViewModel属性

  6. 6

    将标签绑定到ViewModel属性

  7. 7

    将viewModel属性绑定到MvvmCross中的view属性

  8. 8

    将viewModel属性绑定到MvvmCross中的view属性

  9. 9

    将CollectionViewSource内部的属性绑定到ViewModel的属性

  10. 10

    将 xceed 数据网格绑定到 list<list<ViewModel>>

  11. 11

    将DataGrid绑定到ObservableCollection,后者是ListBox的SelectedItem的属性

  12. 12

    将DataGrid绑定到ObservableCollection,后者是ListBox的SelectedItem的属性

  13. 13

    将列表中的类的属性从ObservableCollection绑定到Datagrid

  14. 14

    将WPF datagrid列标题绑定到后面代码中的属性

  15. 15

    Datagrid将一个对象的多个属性绑定到列

  16. 16

    将多个CheckBox绑定到ViewModel中的单个属性

  17. 17

    无法将TreeViewItem的IsSelected属性绑定到ViewModel

  18. 18

    如何将ListView / CollectionView的DataTemplate绑定到ViewModel属性

  19. 19

    无法将TreeViewItem的IsSelected属性绑定到ViewModel

  20. 20

    将XAMLCropControl ImageSource绑定到ViewModel中的ImageSource属性失败

  21. 21

    将属性绑定到itemssource集合的属性

  22. 22

    将数字属性绑定到布尔属性

  23. 23

    将UserControl属性绑定到Window属性

  24. 24

    将资源属性绑定到DataContext属性

  25. 25

    将两个XAML元素属性绑定到相同的ViewModel属性不起作用

  26. 26

    将属性绑定到DataTemplateSelector

  27. 27

    将属性绑定到现有绑定

  28. 28

    将数据网格列绑定到动态属性

  29. 29

    将数据网格列绑定到动态属性

热门标签

归档