C# 将GridControl中的一些ObservableCollection项推送到另一个ObservableCollection XAML中
我想将ObservableCollection绑定到DevXPress GridControl,但它不起作用 我的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
<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]
{