在视图模型

时间:2018-03-15 13:07:02

标签: c# wpf mvvm observablecollection wpfdatagrid

我在视图模型中集成了两个接口作为Observable Collections。它们如下, 产品结果:

    public interface IProdResult
    {
       string Name { get; set; }        // product name
       IMeasureResult Result { get; }   // product result
       IPos NominalPos { get; }         // nominal pose               
       IPos Deviation { get; }          // deviation
       string PinType { get; }         // product type                  
       IPresentationData Presentation { get; } //Presentation Data          
    }

小组结果:

    public interface IGroupResult
      {
           IList<IPocketResult> PocketResults { get; }   
           ResultEnum Result { get; }               // ProductResult
           string Identifier { get; }               // Identifier      
           DateTime TimeStamp { get; }              // Timestamp
           IPresentationData Presentation { get; }  //Presentation data      
      }

我的视图模型如下

    public class AnalysisDataGridViewModel : SubPageViewModel
        {
            #region Fields        
            private ObservableCollection<IProdResult> _product
                = new ObservableCollection<IProdResult>();

            private ObservableCollection<IGroupResult> _group
             = new ObservableCollection<IGroupResult>();

    public MainViewModel()
    {
        Coordinates = new Dictionary<Coordinate, NotifingBoolean>();        
        var services = App.Container.Resolve<IProductionServices>();
        services.ProductSelectionOnservable
            .SelectMany(group=> group.GroupResults) 
            .SelectMany(products => products.ProductResults)               
            .Subscribe(product=> ProdView.Add(product));

        services.ProductSelectionOnservable
            .SelectMany(group => group.GroupResults)
            .Subscribe(group=> GroupView.Add(group));

    }

    public ObservableCollection<IProdResult> ProdView=> _product;
    public ObservableCollection<IGroupResult> GroupView=> _group;

            }

现在我需要从IGroupResult获取Identifier并将其与IProdResult结合使用,以便我可以在datagrid列中将它们显示为Identifier。每个组都有一个具有相同组标识符的产品列表,并且需要为数据网格中的每个产品行显示它们。

我的数据网格如下

            <ScrollViewer HorizontalScrollBarVisibility="Auto" VerticalScrollBarVisibility="Auto">
                    <Grid VerticalAlignment="Top" HorizontalAlignment="Left">             
                    <DataGrid Grid.Row="1" 
                              AutoGenerateColumns="False"                                    
                              HeadersVisibility="All"          
                              SelectionMode="Extended"
                              SelectionUnit="FullRow"
                              CanUserReorderColumns="True"
                              ItemsSource="{Binding ProdView}">
                            <DataGrid.Columns>                  
                            <DataGridTextColumn Header="{DynamicResource Name}"
                                                Width="Auto"
                                                Binding="{Binding Name}" />
                            <DataGridTextColumn Header="{DynamicResource NominalPoseX}"
                                                Width="Auto"
                                                Binding="{Binding NominalPos.X}" />
                            <DataGridTextColumn Header="{DynamicResource NominalPoseY}"
                                                Width="Auto"
                                                Binding="{Binding NominalPos.Y}" />
                            <DataGridTextColumn Header="{DynamicResource NominalPoseZ}"
                                                Width="Auto"
                                                Binding="{Binding NominalPos.Z}" />                
                            <DataGridTextColumn Header="{DynamicResource DeviationX}"
                                                Width="Auto"
                                                Binding="{Binding Deviation.X}" />
                            <DataGridTextColumn Header="{DynamicResource DeviationY}"
                                                Width="Auto"
                                                Binding="{Binding Deviation.Y}" />
                            <DataGridTextColumn Header="{DynamicResource DeviationZ}"
                                                Width="Auto"
                                                Binding="{Binding Deviation.Z}" />
                            <DataGridTextColumn Header="{DynamicResource ResultX}"
                                                Width="Auto"
                                                Binding="{Binding Result.X}" />
                            <DataGridTextColumn Header="{DynamicResource ResultY}"
                                                Width="Auto"
                                                Binding="{Binding Result.Y}" />
                            <DataGridTextColumn Header="{DynamicResource ResultZ}"
                                                Width="Auto"
                                                Binding="{Binding Result.Z}" />
                        </DataGrid.Columns>

我在Link1中查看了以下答案,并使用了Composite Collection或CollectionViewSource,但找不到合适的解决方案。任何帮助都会非常有用。

0 个答案:

没有答案