首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >多结合XamDataGrid

多结合XamDataGrid
EN

Stack Overflow用户
提问于 2015-03-10 19:39:17
回答 2查看 453关注 0票数 1

我正在尝试使用下面的来自不碎片整理站点的代码示例,我希望XamDataCards中的编辑能够反映在XamDataGrid中。但是,我的DataSource for XamDataGrid是ViewModel中的ObservableCollection<Companies>。我如何也可以绑定到卡和中继更新回我的Companies对象在ViewModel中?

代码语言:javascript
复制
<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

代码语言:javascript
复制
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;
    }
}

模型/上下文代码只是首先生成的EF数据库。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-03-12 18:54:30

没有狄奥多西和加内什的投入,我不可能得到这个答案--因此,多亏了他们,他们都有了部分答案。

我第一次试着把SelectedDataItems of XamDataGrid和XamDataCards绑定到ViewModel上,就像狄奥多修斯建议的那样,但这还不够。多亏了Ganesh,我在我的模型对象上实现了INotifyPropertyChanged,方法是继承ObservableObject in MVVMLight (我怎么不知道模型需要这个呢?)

下面是使其工作的相关代码片段。我还实现了PropertyChanged.Fody 如这里所记载的;这就是TypedViewModelBase<T>RaisePropertyChanged()删除的来源。我还使用LINQ/Automapper .Project().To<T>()调用在这里可以找到来创建模型对象。

模型

代码语言:javascript
复制
 public class Company : ObservableObject
{
    public Company() { }
    public int id { get; set; }
    public string strName { get; set; }
    public string strDomicileCode { get; set; }
}

ViewModel

代码语言:javascript
复制
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;
    }
}

视图

代码语言:javascript
复制
<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">                      
票数 0
EN

Stack Overflow用户

发布于 2015-03-10 20:24:16

您需要将XamDataGrid的SelectedDataItems属性绑定到object[] ie类型的属性。SelectedCompanies在ViewModel中,并绑定到XamDataCards的数据源中。

这个线程中接受的答案有一个示例,展示了如何做到这一点,尽管使用的是ListBox而不是XamDataCards:http://www.infragistics.com/community/forums/t/89122.aspx

只要用您的ListBox控件替换那个XamDataCards,它就能工作并更新XamDataGrid。示例中的ViewModel包含在MainWindow代码背后,因此它是您想要的MVVM。

更多信息:Items.html

IG的SelectedDataItems是一个object[]:http://help.infragistics.com/Help/Doc/WPF/2014.1/CLR4.0/html/InfragisticsWPF4.DataPresenter.v14.1~Infragistics.Windows.DataPresenter.DataPresenterBase~SelectedDataItems.html

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28972646

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档