Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 多个DataGrid RowDetailsTemplate的单个ObservableCollection_C#_Wpf_Mvvm_Datagrid_Wpfdatagrid - Fatal编程技术网

C# 多个DataGrid RowDetailsTemplate的单个ObservableCollection

C# 多个DataGrid RowDetailsTemplate的单个ObservableCollection,c#,wpf,mvvm,datagrid,wpfdatagrid,C#,Wpf,Mvvm,Datagrid,Wpfdatagrid,我正在尝试将文件列表上载到数据库。加载的工作方式是用户选择一个文件,然后将该文件读入ObservableCollection。数据由文件元信息和基金信息组成。对于每个文件,如果缺少某些基金信息,则会向用户显示基金以填写缺少的信息。多个文件可能包含丢失信息的同一基金。我正在逐个文件显示丢失的基金信息。我的目标是拥有一个基金模型和多个基金信息显示。当在一个位置更新基金信息时,我希望该更新反映在所有位置。我已经能够在多个地方显示基金信息,但不能在后台显示一个模型。如何在我所有的数据网格后面获得一个模型

我正在尝试将文件列表上载到数据库。加载的工作方式是用户选择一个文件,然后将该文件读入ObservableCollection。数据由文件元信息和基金信息组成。对于每个文件,如果缺少某些基金信息,则会向用户显示基金以填写缺少的信息。多个文件可能包含丢失信息的同一基金。我正在逐个文件显示丢失的基金信息。我的目标是拥有一个基金模型和多个基金信息显示。当在一个位置更新基金信息时,我希望该更新反映在所有位置。我已经能够在多个地方显示基金信息,但不能在后台显示一个模型。如何在我所有的数据网格后面获得一个模型

xaml

视图模型
公共类AuditTests:INotifyPropertyChanged
{
公共事件属性更改事件处理程序属性更改;
//物体
FileLoader FileLoader=新的FileLoader();
私有void RaisePropertyChanged(字符串属性)
{
if(PropertyChanged!=null)
{
PropertyChanged(此,新PropertyChangedEventArgs(property));
}
}
公共ObservableCollection文件{get;set;}
公共审计测试()
{
//集合初始化
初始化数据();
}
公共无效初始化数据()
{
Files=newobserveCollection(){newfilemeta()};
}
私有void AddFileRequested()
{
Files=newobserveCollection(){newfilemeta()};
saveFileCommand.RaiseCanExecuteChanged();
}
}
FileMeta
公共部分类FileMeta:INotifyPropertyChanged
{
私人可观测集合基金;
公共事件属性更改事件处理程序属性更改;
公共FileMeta()
{
资金=新的可观察集合();
}
私有void RaisePropertyChanged(字符串属性)
{
if(PropertyChanged!=null)
{
PropertyChanged(此,新PropertyChangedEventArgs(property));
}
}
公共集资
{
得到
{
返还资金;
}
设置
{
如果(_funds!=值)
{
_资金=价值;
募集财产变更(“资金”);
}
}
}
}
文件加载器
公共类文件加载器
{
公开募捐基金{get;set;}
公共void加载文件(FileMeta文件)
{
newFund=GetFund(row.Cell(1.Value.ToString());
file.Funds.Add(newFund);
}
私人基金GetFund(字符串fundName)
{
使用(var db=new IISContext())
{
//如果它存在于数据库中
if((从db.Fund中的f开始,其中f.FundName==FundName选择f).Count()==0)
{
//如果我们这次已经加载了
var existingFunds=(来自基金中的f,其中f.FundName==基金名称选择f);
如果(existingFunds.Count()==0)
{
基金新基金=新基金();
newFund.FundId=Guid.NewGuid();
newFund.Cusip=“”;
newFund.FundFamilyId=(从db.FundFamily中的ff开始,其中ff.FundFamilyName==“默认”选择ff.FundFamilyId);
newFund.FundName=基金名称;
基金。添加(新基金);
返还新基金;
}
其他的
{
返回现有资金。首先();
}
}
其他的
{
返回(从db.Fund中的f开始,其中f.FundName==FundName选择f);
}
}
}
}
基金
公共部分类基金:InotifyProperty已更改
{
公共事件属性更改事件处理程序属性更改;
私有Guid _fundID;
私有字符串_cusip;
私有字符串_fundName;
选择私人布尔;
私人基金家庭(FundFamily);;
私有void RaisePropertyChanged(字符串属性)
{
if(PropertyChanged!=null)
{
PropertyChanged(此,新PropertyChangedEventArgs(property));
}
}
公帑()
{
PortfolioHolding=新哈希集();
}
公共Guid基金ID
{
得到
{
返回(fundID);;
}
设置
{
如果(_fundID!=值)
{
_fundID=值;
募捐财产变更(“基金ID”);
}
}
}
公共字符串Cusip
{
得到
{
返回(cusip);;
}
设置
{
如果(_cusip!=值)
{
_cusip=价值;
RaisePropertyChanged(“Cusip”);
}
}
}
公共Guid FundFamilyId{get;set;}
公共字符串名称
{
得到
{
返回基金名称;
}
设置
{
如果(_fundName!=值)
{
_fundName=值;
R
<DataGrid Grid.Row="1" Grid.ColumnSpan="3" Margin="10" ItemsSource="{Binding Path=Files}" SelectedValue="{Binding Path=SelectedUploadFile}" AutoGenerateColumns="False" CanUserAddRows="False">
    <DataGrid.Columns>
        <!--Removed for brevity-->
    </DataGrid.Columns>
    <DataGrid.RowDetailsTemplate>
        <DataTemplate>                    
            <DataGrid ItemsSource="{Binding Path=Funds}" CanUserAddRows="False" AutoGenerateColumns="False" VerticalScrollBarVisibility="Visible" MaxHeight="200">                            
                <DataGrid.Columns>
                    <DataGridTemplateColumn Header="Fund Name">
                        <DataGridTemplateColumn.CellTemplate>
                            <DataTemplate>
                                <Label Content="{Binding Path=FundName, Mode=OneWay}"/>
                            </DataTemplate>
                        </DataGridTemplateColumn.CellTemplate>
                    </DataGridTemplateColumn>                            
                </DataGrid.Columns>
            </DataGrid>
        </DataTemplate>
   </DataGrid.RowDetailsTemplate>
</DataGrid>
public class AuditTests : INotifyPropertyChanged
{
    public event PropertyChangedEventHandler PropertyChanged;

    // Objects
    FileLoader fileLoader = new FileLoader();

    private void RaisePropertyChanged(string property)
    {
        if (PropertyChanged != null)
        {
            PropertyChanged(this, new PropertyChangedEventArgs(property));
        }
    }

    public ObservableCollection<FileMeta> Files { get; set; }

    public AuditTests()
    {
        // Collection Initialization
        InitializeData();
    }

    public void InitializeData()
    {
        Files = new ObservableCollection<FileMeta>() { new FileMeta () };
    }

    private void AddFileRequested()
    {
        Files = new ObservableCollection<FileMeta>() { new FileMeta () };
        SaveFilesCommand.RaiseCanExecuteChanged();
    }
}
public partial class FileMeta : INotifyPropertyChanged
{
    private ObservableCollection<Fund> _funds;

    public event PropertyChangedEventHandler PropertyChanged;

    public FileMeta()
    {
        Funds = new ObservableCollection<Fund>();
    }

    private void RaisePropertyChanged(string property)
    {
        if (PropertyChanged != null)
        {
            PropertyChanged(this, new PropertyChangedEventArgs(property));
        }
    }

    public ObservableCollection<Fund> Funds
    {
        get
        {
            return _funds;
        }
        set
        {
            if (_funds != value)
            {
                _funds = value;
                RaisePropertyChanged("Funds");
            }
        }
    }
}
public class FileLoader
{
    public ObservableCollection<Fund> Funds { get; set; }

    public void LoadFile(FileMeta file)
    {
        newFund = GetFund(row.Cell(1).Value.ToString());
        file.Funds.Add(newFund);
    }

    private Fund GetFund(string fundName)
        {
            using (var db = new IISContext())
            {
                // If it exists in the database
                if ((from f in db.Fund where f.FundName == fundName select f).Count() == 0)
                {
                    // If we've already loaded this time
                    var existingFunds = (from f in Funds where f.FundName == fundName select f);
                    if (existingFunds.Count() == 0)
                    {
                        Fund newFund = new Fund();
                        newFund.FundId = Guid.NewGuid();
                        newFund.Cusip = "";
                        newFund.FundFamilyId = (from ff in db.FundFamily where ff.FundFamilyName == "Default" select ff.FundFamilyId).First();
                        newFund.FundName = fundName;
                        Funds.Add(newFund);
                        return newFund;
                    }
                    else
                    {
                        return existingFunds.First();
                    }
                }
                else
                {
                    return (from f in db.Fund where f.FundName == fundName select f).First();
                }
            }
        }
}
public partial class Fund : INotifyPropertyChanged
    {
        public event PropertyChangedEventHandler PropertyChanged;

        private Guid _fundID;
        private string _cusip;
        private string _fundName;
        private bool _selected;
        private FundFamily _fundFamily;

        private void RaisePropertyChanged(string property)
        {
            if (PropertyChanged != null)
            {
                PropertyChanged(this, new PropertyChangedEventArgs(property));
            }
        }

        public Fund()
        {
            PortfolioHolding = new HashSet<PortfolioHolding>();
        }

        public Guid FundId
        {
            get
            {
                return _fundID;
            }
            set
            {
                if (_fundID != value)
                {
                    _fundID = value;
                    RaisePropertyChanged("FundID");
                }
            }
        }

        public string Cusip
        {
            get
            {
                return _cusip;
            }
            set
            {
                if (_cusip != value)
                {
                    _cusip = value;
                    RaisePropertyChanged("Cusip");
                }
            }
        }

        public Guid FundFamilyId { get; set; }

        public string FundName
        {
            get
            {
                return _fundName;
            }
            set
            {
                if (_fundName != value)
                {
                    _fundName = value;
                    RaisePropertyChanged("FundName");
                }
            }
        }

        [NotMapped]
        public bool Selected
        {
            get
            {
                return _selected;
            }
            set
            {
                if (_selected != value)
                {
                    _selected = value;
                    RaisePropertyChanged("Selected");
                }
            }
        }

        public virtual ICollection<PortfolioHolding> PortfolioHolding { get; set; }

        public virtual FundFamily FundFamily
        {
            get
            {
                return _fundFamily;
            }
            set
            {
                if (_fundFamily != value)
                {
                    _fundFamily = value;
                    RaisePropertyChanged("FundFamily");
                }
            }
        }
    }
AuditTests
    Files: [
        FileMeta
            Funds: [ Fund A, Fund C ]

        FileMeta 
            Funds: [ Fund A, Fund B, Fund D ]
    ]

FileLoader
    Funds: [ Fund A, Fund B, Fund C, Fund D ]