多重绑定 XamDataGrid
Multibinding XamDataGrid
我正在尝试使用以下 code example from the Infragistics site 并且我希望在 XamDataCards 中进行的编辑反映在 XamDataGrid 中。但是,我的 XamDataGrid 数据源在我的 ViewModel 中是一个 ObservableCollection<Companies>
。我还如何绑定到卡片并将更新中继回 ViewModel 中的 Companies
对象?
<igDP:XamDataGrid x:Name="dgCompanies" Theme="IGTheme" DataSource="{Binding Companies}" SelectedDataItemsScope="RecordsOnly">
<igDP:XamDataGrid.FieldSettings>
<igDP:FieldSettings CellClickAction="SelectCell" AllowEdit="True"/>
</igDP:XamDataGrid.FieldSettings>
</igDP:XamDataGrid>
<igDP:XamDataCards x:Name="XamDataCards1"
Grid.Row="1"
DataSource="{Binding Path=SelectedDataItems, ElementName=dgCompanies}"
Theme="IGTheme">
编辑:添加了 ViewModel
public class CompanyMgmtViewModel : ViewModelBase
{
private ObservableCollection<Object> _Companies = null;
public ObservableCollection<Object> Companies
{
get { return _Companies; }
set
{
if (_Companies != value)
{
_Companies = value;
RaisePropertyChanged(GetPropertyName(() => Companies));
}
}
}
public CompanyMgmtViewModel()
{
this.LoadData();
}
public void LoadData()
{
ObservableCollection<Object> records = new ObservableCollection<Object>();
var results = from res in AODB.Context.TCompanies
select res;
foreach (var item in results)
if (item != null) records.Add(item);
Companies = records;
}
}
Model/Context 代码只是 EF 数据库首次生成。
您需要将 XamDataGrid 的 SelectedDataItems 属性 绑定到对象 [] 类型的 属性 即。 SelectedCompanies 在您的 ViewModel 中并绑定到您的 XamDataCards 数据源。
此线程中已接受的答案有一个示例展示了如何执行此操作,尽管使用的是 ListBox 而不是 XamDataCards:
http://www.infragistics.com/community/forums/t/89122.aspx
只需用您的 XamDataCards 控件替换那个 ListBox,它就可以工作并更新 XamDataGrid。示例中的 ViewModel 包含在 MainWindow 代码隐藏中,因此它是您想要的 MVVM。
更多信息:
http://help.infragistics.com/Help/Doc/WPF/2014.1/CLR4.0/html/xamDataGrid_Selected_Data_Items.html
IG的SelectedDataItems是对象[]:
http://help.infragistics.com/Help/Doc/WPF/2014.1/CLR4.0/html/InfragisticsWPF4.DataPresenter.v14.1~Infragistics.Windows.DataPresenter.DataPresenterBase~SelectedDataItems.html
如果没有 Theodosius 和 Ganesh 的意见,我不可能得到这个答案 - 所以感谢他们,他们都得到了部分答案。
我首先尝试按照 Theodosius 的建议,通过 ViewModel 上的 属性 将 XamDataGrid 的 SelectedDataItems 绑定到 XamDataCards,但这还不够。感谢 Ganesh,我通过从 MVVMLight 中的 ObservableObject 继承,在我的模型对象上实现了 INotifyPropertyChanged(我怎么不知道模型需要这个?)。
下面是使其工作的相关代码片段。
我还实现了 PropertyChanged.Fody as documented here;这就是 TypedViewModelBase<T>
和删除 RaisePropertyChanged()
的来源。
我还通过使用 LINQ/Automapper .Project().To<T>()
调用 which can be found here.
创建我的模型对象
型号
public class Company : ObservableObject
{
public Company() { }
public int id { get; set; }
public string strName { get; set; }
public string strDomicileCode { get; set; }
}
ViewModel
public class CompanyMgmtViewModel : TypedViewModelBase<Company>
{
private ObservableCollection<Object> _Companies = null;
private Object[] _selectedCompany = null;
public Object[] Company
{
get { return _selectedCompany; }
set
{
if (_Company != value)
{
_selectedCompany = value;
}
}
}
public ObservableCollection<Object> Companies
{
get { return _Companies; }
set
{
if (_Companies != value)
{
_Companies = value;
}
}
}
public CompanyMgmtViewModel()
{
this.LoadData();
}
public void LoadData()
{
ObservableCollection<Object> records = new ObservableCollection<Object>();
var results = AODB.Context.TCompanies.Project().To<Company>();
foreach (var item in results)
if (item != null) records.Add(item);
Companies = records;
}
}
查看
<igDP:XamDataGrid x:Name="dgCompanies"
Theme="IGTheme"
DataSource="{Binding Companies, Mode=OneWay}"
SelectedDataItemsScope="RecordsOnly"
SelectedDataItems="{Binding Company}">
...
<igDP:XamDataCards x:Name="XamDataCards1"
Grid.Row="1"
DataSource="{Binding ElementName=dgCompanies, Path=SelectedDataItems}"
Theme="IGTheme">
我正在尝试使用以下 code example from the Infragistics site 并且我希望在 XamDataCards 中进行的编辑反映在 XamDataGrid 中。但是,我的 XamDataGrid 数据源在我的 ViewModel 中是一个 ObservableCollection<Companies>
。我还如何绑定到卡片并将更新中继回 ViewModel 中的 Companies
对象?
<igDP:XamDataGrid x:Name="dgCompanies" Theme="IGTheme" DataSource="{Binding Companies}" SelectedDataItemsScope="RecordsOnly">
<igDP:XamDataGrid.FieldSettings>
<igDP:FieldSettings CellClickAction="SelectCell" AllowEdit="True"/>
</igDP:XamDataGrid.FieldSettings>
</igDP:XamDataGrid>
<igDP:XamDataCards x:Name="XamDataCards1"
Grid.Row="1"
DataSource="{Binding Path=SelectedDataItems, ElementName=dgCompanies}"
Theme="IGTheme">
编辑:添加了 ViewModel
public class CompanyMgmtViewModel : ViewModelBase
{
private ObservableCollection<Object> _Companies = null;
public ObservableCollection<Object> Companies
{
get { return _Companies; }
set
{
if (_Companies != value)
{
_Companies = value;
RaisePropertyChanged(GetPropertyName(() => Companies));
}
}
}
public CompanyMgmtViewModel()
{
this.LoadData();
}
public void LoadData()
{
ObservableCollection<Object> records = new ObservableCollection<Object>();
var results = from res in AODB.Context.TCompanies
select res;
foreach (var item in results)
if (item != null) records.Add(item);
Companies = records;
}
}
Model/Context 代码只是 EF 数据库首次生成。
您需要将 XamDataGrid 的 SelectedDataItems 属性 绑定到对象 [] 类型的 属性 即。 SelectedCompanies 在您的 ViewModel 中并绑定到您的 XamDataCards 数据源。
此线程中已接受的答案有一个示例展示了如何执行此操作,尽管使用的是 ListBox 而不是 XamDataCards: http://www.infragistics.com/community/forums/t/89122.aspx
只需用您的 XamDataCards 控件替换那个 ListBox,它就可以工作并更新 XamDataGrid。示例中的 ViewModel 包含在 MainWindow 代码隐藏中,因此它是您想要的 MVVM。
更多信息: http://help.infragistics.com/Help/Doc/WPF/2014.1/CLR4.0/html/xamDataGrid_Selected_Data_Items.html
IG的SelectedDataItems是对象[]: http://help.infragistics.com/Help/Doc/WPF/2014.1/CLR4.0/html/InfragisticsWPF4.DataPresenter.v14.1~Infragistics.Windows.DataPresenter.DataPresenterBase~SelectedDataItems.html
如果没有 Theodosius 和 Ganesh 的意见,我不可能得到这个答案 - 所以感谢他们,他们都得到了部分答案。
我首先尝试按照 Theodosius 的建议,通过 ViewModel 上的 属性 将 XamDataGrid 的 SelectedDataItems 绑定到 XamDataCards,但这还不够。感谢 Ganesh,我通过从 MVVMLight 中的 ObservableObject 继承,在我的模型对象上实现了 INotifyPropertyChanged(我怎么不知道模型需要这个?)。
下面是使其工作的相关代码片段。
我还实现了 PropertyChanged.Fody as documented here;这就是 TypedViewModelBase<T>
和删除 RaisePropertyChanged()
的来源。
我还通过使用 LINQ/Automapper .Project().To<T>()
调用 which can be found here.
型号
public class Company : ObservableObject
{
public Company() { }
public int id { get; set; }
public string strName { get; set; }
public string strDomicileCode { get; set; }
}
ViewModel
public class CompanyMgmtViewModel : TypedViewModelBase<Company>
{
private ObservableCollection<Object> _Companies = null;
private Object[] _selectedCompany = null;
public Object[] Company
{
get { return _selectedCompany; }
set
{
if (_Company != value)
{
_selectedCompany = value;
}
}
}
public ObservableCollection<Object> Companies
{
get { return _Companies; }
set
{
if (_Companies != value)
{
_Companies = value;
}
}
}
public CompanyMgmtViewModel()
{
this.LoadData();
}
public void LoadData()
{
ObservableCollection<Object> records = new ObservableCollection<Object>();
var results = AODB.Context.TCompanies.Project().To<Company>();
foreach (var item in results)
if (item != null) records.Add(item);
Companies = records;
}
}
查看
<igDP:XamDataGrid x:Name="dgCompanies"
Theme="IGTheme"
DataSource="{Binding Companies, Mode=OneWay}"
SelectedDataItemsScope="RecordsOnly"
SelectedDataItems="{Binding Company}">
...
<igDP:XamDataCards x:Name="XamDataCards1"
Grid.Row="1"
DataSource="{Binding ElementName=dgCompanies, Path=SelectedDataItems}"
Theme="IGTheme">