none
Две коллекции в один DataGrid в одну ячейку RRS feed

  • Общие обсуждения

  • Всем доброго времени суток, помогите пожалуйста решить проблему следующего рода. У меня есть одна коллекция которая принимает структуру прочитанную с файла и далее выводит её в datagrid. Но появилась необходимость произвести мат. расчет и выходные данные также отобразить в таблице. для этого я создал еще одну коллекцию с одной переменной массива, обернул все в коллекцию, но как теперь отобразить мне эти данные в той таблице где коллекция уже объявлена ?

    public class test
        {
           
            public float[] result { get; set; }
        };
    
    
        
        [StructLayout(LayoutKind.Sequential)]
        public class str_pereval                      //Класс данных валков
        {
            public int nk               { get; set; } //Номер клети
            public int N_lower          { get; set; } //Номер нижнего валка
            public int N_top            { get; set; } //Номер верхнего валка
            public float d_lower        { get; set; } //Диаметр нижнего валка 
            public float d_top          { get; set; } //Диаметр верхнего валка
            public DateTime t_n         { get; set; } //Дата\Время перевалки
            public DateTime t_k         { get; set; }
            public float L              { get; set; } //Длина
            public float P              { get; set; } //Вес в тоннах
            public float Pm             { get; set; } //Вес в тоннах при прокате меньше 0.7мм
            public float Pp             { get; set; } //Вес в тоннах при прокате больше либо равно 0.7 мм
            public float kal_n          { get; set; }
            public float kal_v          { get; set; }
            public float res_v          { get; set; } //Ресурс валков
            
    
            [MarshalAs(UnmanagedType.ByValArray, SizeConst = 4)]
            private float[] frez;
            [MarshalAs(UnmanagedType.ByValArray, SizeConst = 4)]
            private int[] irez;
              
           public float[] Frez { get { return frez; } }
           public int[] Irez {get { return irez; }}
        };
    
           public partial class MainWindow : Window
        {
            public ObservableCollection<str_pereval> List { get; private set; } = new ObservableCollection<str_pereval>();
            public ObservableCollection<str_pereval> List1 { get; private set; } = new ObservableCollection<str_pereval>();
            public ObservableCollection<test> tests { get; private set; } = new ObservableCollection<test>();
          
            public MainWindow()
            { 
                InitializeComponent();
                DataContext = List;
                DataContext = List1;
                DataContext = tests;
               
            }
    
            private void CommandBinding_Open_Executed(object sender, ExecutedRoutedEventArgs e)
            {
                float[] res_val_m = new float[] { 2700, 2100, 1300, 1000, 30000, 30000, 30000, 20000};
                float[] res_val_p = new float[] { 3500, 3000, 2200, 2000, 40000, 40000, 40000, 30000};
                List.Clear();
                List1.Clear();            
                int counter = 0;
                using (var reader = new BinaryReader(File.OpenRead("fpereval.dat")))
                {
                    while (reader.BaseStream.Position != reader.BaseStream.Length)
                    {
                        
                        var obj = ReadStruct<str_pereval>(reader);
                        if (counter < 4)
                         List.Add(obj); 
                        else
                            List1.Add(obj);
                            counter++;
      }
    }
    for (int i = 0; i < 4; i++)
                {
                    float[] objj = new float[8];
                       objj[i] = 1 - (List[i].Pm / res_val_m[i]) - (List[i].Pp / res_val_p[i]);
                       tests.Add(new test {result=objj});
                }
    
            }

    Вот если выводить мою коллекцию отдельно все работает.

     <DataGrid x:Name="dataGrid1" ItemsSource="{Binding tests}" DataContext ="{x:Reference mainWindow}" AutoGenerateColumns="False"
                                  HorizontalAlignment="Left" VerticalAlignment="Top" Height="304" Width="548">
                            <DataGrid.Columns>
                                <DataGridTextColumn Header="Test" Binding="{Binding result[3]}" />
                            </DataGrid.Columns>
                        </DataGrid>


    А мне нужно так:

     <DataGrid x:Name="Testik"  ItemsSource="{Binding List}"  DataContext ="{x:Reference mainWindow}"
                                   AutoGenerateColumns="False"   IsReadOnly="False" SelectionMode="Single"  CanUserDeleteRows="False" 
                                   CanUserAddRows="False" CanUserResizeRows="False" RowDetailsVisibilityMode="Visible" Margin="-10,42,10,-135" FontWeight="Bold" FontSize="13.333"
                                   RenderTransformOrigin="0.5,0.5" BeginningEdit="Testik_BeginningEdit" Height="701" VerticalAlignment="Top" Grid.ColumnSpan="2" >
                            <DataGrid.RenderTransform>
                                <TransformGroup>
                                    <ScaleTransform/>
                                    <SkewTransform AngleX="-0.735"/>
                                    <RotateTransform Angle="-0.248"/>
                                    <TranslateTransform X="-1.487"/>
                                </TransformGroup>
                            </DataGrid.RenderTransform>
    
                            <DataGrid.Columns>
    <DataGridTextColumn Header="Вес(т)\Длина">
                                    <DataGridTextColumn.Binding>
                                        <MultiBinding Converter="{local:Myconverter}">
                                            <Binding Path="P"/>
                                            <Binding Path ="result[3]"/>
                                        </MultiBinding>
                                    </DataGridTextColumn.Binding>
                                </DataGridTextColumn>
    </DataGrid.Columns>
    </DataGrid>

    Понятно что result[3] работать не будет, так как нет обращения к ItemsSource="{Binding tests}".

    Как же все таки обьеденить List и tests помогите пожалуйста.Может есть другой путь решения ?  Большое спасибо

      
    1 декабря 2015 г. 11:02