C# 将GridControl中的一些ObservableCollection项推送到另一个ObservableCollection XAML中

C# 将GridControl中的一些ObservableCollection项推送到另一个ObservableCollection XAML中,c#,wpf,xaml,devexpress,multi-select,C#,Wpf,Xaml,Devexpress,Multi Select,我想将ObservableCollection绑定到DevXPress GridControl,但它不起作用 我的XAML代码: <dxg:GridColumn Header="Categorie" FieldName="SelectetProgrammCategorieIds"> <dxg:GridColumn.EditSettings> <dxe:ComboBoxE

我想将ObservableCollection绑定到DevXPress GridControl,但它不起作用

我的XAML代码:

     <dxg:GridColumn Header="Categorie" FieldName="SelectetProgrammCategorieIds">
                    <dxg:GridColumn.EditSettings>
                        <dxe:ComboBoxEditSettings ItemsSource="{Binding AlleCategorien, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}" ValueMember="ID" DisplayMember="Name">
                            <dxe:ComboBoxEditSettings.StyleSettings>
                                <dxe:CheckedComboBoxStyleSettings/>
                            </dxe:ComboBoxEditSettings.StyleSettings>
                        </dxe:ComboBoxEditSettings>
                    </dxg:GridColumn.EditSettings>
                </dxg:GridColumn>

SelectetProgrammCategorieIds是一个OBC,AlleCegorien是我所有类别的列表。我想将AlleCegorien中的一些标记项单独加载到SelecteTProgrammCategorieID中


问候Venson当然我在两个不同的位置使用它这里是最小的:

<UserControl x:Class="Unattended_Tool.View.UserControls.Admin.UserControls.Detail"
         xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
         xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
         xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
         xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 

         xmlns:dxc="http://schemas.devexpress.com/winfx/2008/xaml/core"   
         xmlns:dxg="http://schemas.devexpress.com/winfx/2008/xaml/grid" 
         xmlns:dxe="http://schemas.devexpress.com/winfx/2008/xaml/editors" 
         xmlns:dxlc="http://schemas.devexpress.com/winfx/2008/xaml/layoutcontrol" 

         mc:Ignorable="d" 
         d:DesignHeight="300" d:DesignWidth="300">

<dxlc:GroupBox MinimizeElementVisibility="Visible" IsManipulationEnabled="True" >
    <Grid>
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="2*"/>
            <ColumnDefinition/>
        </Grid.ColumnDefinitions>
        <Grid.RowDefinitions>
            <RowDefinition/>
        </Grid.RowDefinitions>
        <dxg:GridControl Name="GridControlUser" ItemsSource="{Binding AlleICTSUser, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}" AutoExpandAllGroups="True" ShowBorder="True" Grid.Column="0" Grid.Row="1" Grid.ColumnSpan="2">

            <dxg:GridControl.View>
                <dxg:TableView Name="tableViewGrid" FocusedRow="{Binding SelecetetUser, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}" >
                    <dxg:TableView.InputBindings>
                        <KeyBinding Key="Del" Modifiers="Control" Command="{Binding RemoveICTSUserCommand}"/>
                        <KeyBinding Key="N" Modifiers="Control" Command="{Binding AddICTSUserCommand}"/>
                    </dxg:TableView.InputBindings>
                </dxg:TableView>
            </dxg:GridControl.View>

            <dxg:GridControl.Columns>
                <dxg:GridColumn FieldName="Name" Header="Name"/>
                <dxg:GridColumn FieldName="Password" Header="Password" AllowEditing="{Binding SelecetetUser.CanEditPassword, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}">
                    <dxg:GridColumn.EditSettings>
                        <dxe:PasswordBoxEditSettings IsEnabled="{Binding CanEditPassword}" />
                    </dxg:GridColumn.EditSettings>
                </dxg:GridColumn>
                <dxg:GridColumn FieldName="CanEditPassword" Header="CanEdit">
                    <dxg:GridColumn.EditSettings>
                        <dxe:CheckEditSettings />
                    </dxg:GridColumn.EditSettings>
                </dxg:GridColumn>

                <dxg:GridColumn Header="Categorie" FieldName="SelectetProgrammCategorieIds">
                    <dxg:GridColumn.EditSettings>
                        <dxe:ComboBoxEditSettings ItemsSource="{Binding AlleCategorien, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}" ValueMember="ID" DisplayMember="Name">
                            <dxe:ComboBoxEditSettings.StyleSettings>
                                <dxe:CheckedComboBoxStyleSettings/>
                            </dxe:ComboBoxEditSettings.StyleSettings>
                        </dxe:ComboBoxEditSettings>
                    </dxg:GridColumn.EditSettings>
                </dxg:GridColumn>

            </dxg:GridControl.Columns>
        </dxg:GridControl>

    </Grid>
</dxlc:GroupBox>

好吧,我找到了一个方法,但这不是真的,这是一个“小”肮脏,我希望有另一种方法。我的目标类必须如下所示:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.ComponentModel;
    using Unattended_Tool.View.DataStore;
    using System.Collections.ObjectModel;
    using System.Xml.Serialization;

    namespace Unattended_Tool
    {
public class ICTSPrinter : IDataErrorInfo
{
    string _name;
    string _versionsname;
    string _location;
    ObservableCollection<int> _categorie;

    public ObservableCollection<int> Categorie
    {
        get { return _categorie; }
        set { _categorie = value; }
    }

    [XmlIgnore]
    public object SelectetProgrammCategorieIds
    {
        get { return (Object)Categorie; }
        set {                 Categories = new ObservableCollection<int>((value as IEnumerable<Object>).ToObservableCollection<int>()) { };
    }

    public string Location
    {
        get { return _location; }
        set { _location = value; }
    }

    public string VersionsName
    {
        get { return _versionsname; }
        set { _versionsname = value; }
    }

    public string Name
    {
        get { return _name; }
        set { _name = value; }
    }

    public string Error
    {
        get;
        set;
    }

    public string this[string columnName]
    {
        get
        {
            Error = string.Empty;
            switch (columnName)
            {
                case "Name":
                    if (string.IsNullOrEmpty(Name))
                    {
                        Error = "Error";
                    }

                    break;

                case "SelectetProgrammCategorieId":
                    if (DataStoreSingelton.Instance.AlleCategories.FirstOrDefault(S => ((List<int>)SelectetProgrammCategorieIds).FirstOrDefault(s => s == S.ID) == S.ID) != null)
                    {
                        Error = "Please enter a vaild programm categorie";
                    }

                    break;
                default: break;
            }
            return Error;
        }
    }
}
    }
使用系统;
使用System.Collections.Generic;
使用System.Linq;
使用系统文本;
使用系统组件模型;
使用无人值守的_Tool.View.DataStore;
使用System.Collections.ObjectModel;
使用System.Xml.Serialization;
名称空间无人值守工具
{
公共级短跑运动员:IDataErrorInfo
{
字符串\u名称;
字符串_versionsname;
字符串位置;
可观察收集(分类);;
公共可观测集合分类
{
获取{return\u categorie;}
设置{u categorie=value;}
}
[XmlIgnore]
公共对象SelecteTProgrammCategorieID
{
获取{返回(对象)分类;}
set{Categories=newobserveCollection((值为IEnumerable).ToObservableCollection()){};
}
公共字符串位置
{
获取{return\u location;}
设置{u location=value;}
}
公共字符串版本名称
{
获取{return\u versionsname;}
设置{u versionsname=value;}
}
公共字符串名
{
获取{return\u name;}
设置{u name=value;}
}
公共字符串错误
{
得到;
设置
}
公共字符串此[string columnName]
{
得到
{
Error=string.Empty;
开关(列名称)
{
案例“名称”:
if(string.IsNullOrEmpty(Name))
{
Error=“Error”;
}
打破
案例“SelectetProgrammCategorieId”:
if(DataStoreSingelton.Instance.alleCogories.FirstOrDefault(S=>((列表)SelectetProgrammCategorieIds)。FirstOrDefault(S=>S==S.ID)==S.ID)!=null)
{
Error=“请输入有效的程序类别”;
}
打破
默认:中断;
}
返回误差;
}
}
}
}
似乎DevExpress只是在绑定中接受一个对象……我可以使用转换器,但这只是一个解决方法


我在使用12.1.5版本

当然,我在两个不同的位置上使用它这里是最小的:

<UserControl x:Class="Unattended_Tool.View.UserControls.Admin.UserControls.Detail"
         xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
         xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
         xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
         xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 

         xmlns:dxc="http://schemas.devexpress.com/winfx/2008/xaml/core"   
         xmlns:dxg="http://schemas.devexpress.com/winfx/2008/xaml/grid" 
         xmlns:dxe="http://schemas.devexpress.com/winfx/2008/xaml/editors" 
         xmlns:dxlc="http://schemas.devexpress.com/winfx/2008/xaml/layoutcontrol" 

         mc:Ignorable="d" 
         d:DesignHeight="300" d:DesignWidth="300">

<dxlc:GroupBox MinimizeElementVisibility="Visible" IsManipulationEnabled="True" >
    <Grid>
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="2*"/>
            <ColumnDefinition/>
        </Grid.ColumnDefinitions>
        <Grid.RowDefinitions>
            <RowDefinition/>
        </Grid.RowDefinitions>
        <dxg:GridControl Name="GridControlUser" ItemsSource="{Binding AlleICTSUser, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}" AutoExpandAllGroups="True" ShowBorder="True" Grid.Column="0" Grid.Row="1" Grid.ColumnSpan="2">

            <dxg:GridControl.View>
                <dxg:TableView Name="tableViewGrid" FocusedRow="{Binding SelecetetUser, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}" >
                    <dxg:TableView.InputBindings>
                        <KeyBinding Key="Del" Modifiers="Control" Command="{Binding RemoveICTSUserCommand}"/>
                        <KeyBinding Key="N" Modifiers="Control" Command="{Binding AddICTSUserCommand}"/>
                    </dxg:TableView.InputBindings>
                </dxg:TableView>
            </dxg:GridControl.View>

            <dxg:GridControl.Columns>
                <dxg:GridColumn FieldName="Name" Header="Name"/>
                <dxg:GridColumn FieldName="Password" Header="Password" AllowEditing="{Binding SelecetetUser.CanEditPassword, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}">
                    <dxg:GridColumn.EditSettings>
                        <dxe:PasswordBoxEditSettings IsEnabled="{Binding CanEditPassword}" />
                    </dxg:GridColumn.EditSettings>
                </dxg:GridColumn>
                <dxg:GridColumn FieldName="CanEditPassword" Header="CanEdit">
                    <dxg:GridColumn.EditSettings>
                        <dxe:CheckEditSettings />
                    </dxg:GridColumn.EditSettings>
                </dxg:GridColumn>

                <dxg:GridColumn Header="Categorie" FieldName="SelectetProgrammCategorieIds">
                    <dxg:GridColumn.EditSettings>
                        <dxe:ComboBoxEditSettings ItemsSource="{Binding AlleCategorien, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}" ValueMember="ID" DisplayMember="Name">
                            <dxe:ComboBoxEditSettings.StyleSettings>
                                <dxe:CheckedComboBoxStyleSettings/>
                            </dxe:ComboBoxEditSettings.StyleSettings>
                        </dxe:ComboBoxEditSettings>
                    </dxg:GridColumn.EditSettings>
                </dxg:GridColumn>

            </dxg:GridControl.Columns>
        </dxg:GridControl>

    </Grid>
</dxlc:GroupBox>

好的,我找到了一种方法,但它不是真的,它是一个“小”脏东西,我希望有另一种方法。我的目标类必须如下所示:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.ComponentModel;
    using Unattended_Tool.View.DataStore;
    using System.Collections.ObjectModel;
    using System.Xml.Serialization;

    namespace Unattended_Tool
    {
public class ICTSPrinter : IDataErrorInfo
{
    string _name;
    string _versionsname;
    string _location;
    ObservableCollection<int> _categorie;

    public ObservableCollection<int> Categorie
    {
        get { return _categorie; }
        set { _categorie = value; }
    }

    [XmlIgnore]
    public object SelectetProgrammCategorieIds
    {
        get { return (Object)Categorie; }
        set {                 Categories = new ObservableCollection<int>((value as IEnumerable<Object>).ToObservableCollection<int>()) { };
    }

    public string Location
    {
        get { return _location; }
        set { _location = value; }
    }

    public string VersionsName
    {
        get { return _versionsname; }
        set { _versionsname = value; }
    }

    public string Name
    {
        get { return _name; }
        set { _name = value; }
    }

    public string Error
    {
        get;
        set;
    }

    public string this[string columnName]
    {
        get
        {
            Error = string.Empty;
            switch (columnName)
            {
                case "Name":
                    if (string.IsNullOrEmpty(Name))
                    {
                        Error = "Error";
                    }

                    break;

                case "SelectetProgrammCategorieId":
                    if (DataStoreSingelton.Instance.AlleCategories.FirstOrDefault(S => ((List<int>)SelectetProgrammCategorieIds).FirstOrDefault(s => s == S.ID) == S.ID) != null)
                    {
                        Error = "Please enter a vaild programm categorie";
                    }

                    break;
                default: break;
            }
            return Error;
        }
    }
}
    }
使用系统;
使用System.Collections.Generic;
使用System.Linq;
使用系统文本;
使用系统组件模型;
使用无人值守的_Tool.View.DataStore;
使用System.Collections.ObjectModel;
使用System.Xml.Serialization;
名称空间无人值守工具
{
公共级短跑运动员:IDataErrorInfo
{
字符串\u名称;
字符串_versionsname;
字符串位置;
可观察收集(分类);;
公共可观测集合分类
{
获取{return\u categorie;}
设置{u categorie=value;}
}
[XmlIgnore]
公共对象SelecteTProgrammCategorieID
{
获取{返回(对象)分类;}
set{Categories=newobserveCollection((值为IEnumerable).ToObservableCollection()){};
}
公共字符串位置
{
获取{return\u location;}
设置{u location=value;}
}
公共字符串版本名称
{
获取{return\u versionsname;}
设置{u versionsname=value;}
}
公共字符串名
{
获取{return\u name;}
设置{u name=value;}
}
公共字符串错误
{
得到;
设置
}
公共字符串此[string columnName]
{