2016-12-05 7 views
0

私は、関数が呼び出されるたびにデータグリッドに変数からデータを追加しようとしています。また、関数が呼び出されるたびにグリッドがクリアされることを確認します。しかし、私は関数を呼び出すたびにデータが追加されます。誰もこれで私を助けることができますか? databindingは、文字列変数をメンバーとして含むクラスです。あなたがそのことを確認する必要がありCでデータグリッドビューをクリアすることができません#

XAML

<TextBox 
    x:Name="TextOutput" 
    HorizontalAlignment="Left" 
    Height="44" 
    Margin="23,56,0,0" 
    Grid.Row="9" 
    TextWrapping="Wrap" 
    VerticalAlignment="Top" 
    Width="545" 
    Grid.ColumnSpan="2" 
    BorderBrush="{DynamicResource {x:Static SystemColors.DesktopBrushKey}}" 
    /> 
<Button 
    x:Name="bootUpMsg" 
    Content="Read Boot Up Msg" 
    Margin="22,28,59,0" 
    Grid.Row="9" 
    VerticalAlignment="Top" 
    Click="onBootUpClick" 
    Background="{DynamicResource {x:Static SystemColors.ControlBrushKey}}" 
    Foreground="{DynamicResource {x:Static SystemColors.ActiveCaptionTextBrushKey}}" 
    IsEnabled="False" 
    /> 
<Button 
    x:Name="startRead" 
    Content="Start Real Data RD" 
    HorizontalAlignment="Left" 
    Margin="163,28,0,0" 
    Grid.Row="9" 
    VerticalAlignment="Top" 
    Width="120" 
    ToolTip="Start reading data" 
    ToolTipService.ShowDuration="800" 
    Click="onStartClick" 
    Grid.ColumnSpan="2" 
    Background="{DynamicResource {x:Static SystemColors.ControlBrushKey}}" 
    Foreground="{DynamicResource {x:Static SystemColors.ActiveCaptionTextBrushKey}}" 
    IsEnabled="False" 
    /> 
<DataGrid 
    x:Name="dataGrid" 
    HorizontalAlignment="Left" 
    Margin="12,110,0,0" 
    Grid.Row="9" 
    VerticalAlignment="Top" 
    Height="352" 
    Width="858" 
    Grid.ColumnSpan="3" 
    BorderBrush="{DynamicResource {x:Static SystemColors.DesktopBrushKey}}" 
    Background="{DynamicResource {x:Static SystemColors.GradientInactiveCaptionBrushKey}}" 
    Foreground="{DynamicResource {x:Static SystemColors.ActiveCaptionTextBrushKey}}" 
    > 
    <DataGrid.Columns> 
     <DataGridTextColumn Header="Sl.No"   Width="50" Binding="{Binding Path=Sl_No}"/> 
     <DataGridTextColumn Header="Task ID"   Width="50" Binding="{Binding Path=TaskID}"/> 
     <DataGridTextColumn Header="Task Name"  Width="150" Binding="{Binding Path=TaskName}"/> 
     <DataGridTextColumn Header="Core ID"   Width="50" Binding="{Binding Path=CoreID}" /> 
     <DataGridTextColumn Header="Start Time (μs)" Width="100" Binding="{Binding Path=StartTime}"/> 
     <DataGridTextColumn Header="End Time (μs)" Width="100" Binding="{Binding Path=StopTime}"/> 
     <DataGridTextColumn Header="Run Time(μs)"  Width="80" Binding="{Binding Path=ExecutedTime}"/> 
     <DataGridTextColumn Header="Runnable Address" Width="105" Binding="{Binding Path=FunctAdd}"/> 
     <DataGridTextColumn Header="Runnable Name" Width="200" Binding="{Binding Path=FunctName}"/> 
    </DataGrid.Columns> 
</DataGrid> 

C#

public void displayDetails(int scale) 
    { 
     dGrid.Items.Clear(); 
     dGrid.Items.Refresh(); 
     int taskCount = 0; 
     int tasklevel = 0; 
     List<dataBinding> griddata=new List<dataBinding>(); 
     CTask interruptedtask; 
     System.Collections.Stack taskstack = new System.Collections.Stack(); 
     int slCnt = 0; 
     foreach (CCore c in _viewModel.coreList) 
     { 
      c.taskList.Sort();//sorting of tasks in tasklist before plotting 
      taskCount = 0; 
      tasklevel = 0; 
      foreach (CTask t in c.taskList) 
      { 
       slCnt++; 
       var data = new dataBinding 
       { 
        Sl_No = slCnt.ToString(), 
        FunctName = "-", 
        FunctAdd = "-", 
        StartTime = t.taskStartTime.ToString(), 
        StopTime = t.taskEndTime.ToString(), 
        CoreID = c.coreName.ToString(), 
        TaskID = t.task_id.ToString(), 
        TaskName = t.taskName, 
        ExecutedTime = t.runTime.ToString(), 
       }; 
       dGrid.Items.Add(data); 
       if (taskstack.Count == 0) 
       { 
        taskstack.Push(t); 
       } 
       else 
       { 
        while (taskstack.Count != 0) 
        { 
         interruptedtask = (CTask)taskstack.Pop(); 
         if (t.taskStartTime > interruptedtask.taskStartTime && t.taskEndTime < interruptedtask.taskEndTime) 
         { 
          tasklevel++; 
          taskstack.Push(interruptedtask); 
          taskstack.Push(t); 
          break; 
         } 
         else 
         { 
          if (taskstack.Count == 0) 
          { 
           taskstack.Push(t); 
           break; 
          } 
          if (tasklevel != 0) 
          { 
           tasklevel--; 
          } 
         } 
        } 
       } 
       ++taskCount; 
       if (t.taskEndTime != 0) 
       { 
        currentTaskRect = new Rectangle 
        { 
         Width = horizonatlZoom * 40 * (Math.Abs((t.taskEndTime - t.taskStartTime)/scale)), 
         Height = 10 + (verticalZoom) * 2, 
         Fill = _taskcolour[t.task_id], 
         Stroke = Brushes.Black, 
         StrokeThickness = .4, 
         ToolTip = t.taskName + " : " + t.taskStartTime + " - " + t.taskEndTime + ", Duration-" + (t.taskEndTime - t.taskStartTime) + "μs" 
        }; 
       } 
       switch (c.coreName) 
       { 
        case "core0": 
         if (t.taskEndTime != 0) 
          _myCanvas.Width = ((t.taskEndTime + scale) * 40 * horizonatlZoom)/scale; 
         _myCanvas.MaxWidth = _myCanvas.Width; 
         if (!_myCanvas.Children.Contains(currentTaskRect)) 
         { 
          _myCanvas.Children.Add(currentTaskRect); 
          Canvas.SetLeft(currentTaskRect, horizonatlZoom * 40 * ((t.taskStartTime)/scale)); 
          Canvas.SetBottom(currentTaskRect, 420 + tasklevel * (35 + (verticalZoom) * 4)); 
         } 
         break; 
        case "core1": 
         if (t.taskEndTime != 0) 
          _myCanvas.Width = ((t.taskEndTime + scale) * 40 * horizonatlZoom)/scale; 
         if (!_myCanvas.Children.Contains(currentTaskRect)) 
         { 
          _myCanvas.Children.Add(currentTaskRect); 
          Canvas.SetLeft(currentTaskRect, horizonatlZoom * 40 * ((t.taskStartTime)/scale)); 
          Canvas.SetBottom(currentTaskRect, 220 + tasklevel * (35 + (verticalZoom) * 4)); 
         } 
         break; 
        case "core2": 
         if (t.taskEndTime != 0) 
          _myCanvas.Width = ((t.taskEndTime + scale) * 40 * horizonatlZoom)/scale; 
         if (!_myCanvas.Children.Contains(currentTaskRect)) 
         { 
          _myCanvas.Children.Add(currentTaskRect); 
          Canvas.SetLeft(currentTaskRect, horizonatlZoom * 40 * ((t.taskStartTime)/scale)); 
          Canvas.SetBottom(currentTaskRect, 20 + tasklevel * (35 + (verticalZoom) * 4)); 
         } 
         break; 
        default: 
         if (t.taskEndTime != 0) 
          _myCanvas.Width = ((t.taskEndTime + scale) * 40 * horizonatlZoom)/scale; 
         if (!_myCanvas.Children.Contains(currentTaskRect)) 
         { 
          _myCanvas.Children.Add(currentTaskRect); 
          Canvas.SetLeft(currentTaskRect, horizonatlZoom * 40 * ((t.taskStartTime)/scale)); 
          Canvas.SetBottom(currentTaskRect, 20 + tasklevel * (35 + (verticalZoom) * 4)); 
         } 
         break; 
       } 
       foreach (CRunnable r in t.runableList) 
       { 
        // draw runnable rectangles 
        slCnt++; 
        var data2 = new dataBinding 
        { 
         Sl_No = slCnt.ToString(), 
         FunctName = r.runnableName, 
         FunctAdd = r.runnableaddress.ToString("X"), 
         StartTime = r.startTime.ToString(), 
         StopTime = r.endTime.ToString(), 
         CoreID = c.coreName.ToString(), 
         TaskID = t.task_id.ToString(), 
         TaskName = t.taskName, 
         ExecutedTime = r.runTime.ToString() 
        }; 
        dGrid.Items.Add(data2); 
        if (r.endTime != 0) 
        { 
         currentTaskRect = new Rectangle 
         { 
          Width = horizonatlZoom * 40 * (Math.Abs((r.endTime - r.startTime)/scale)), 
          Height = 20 + (verticalZoom) * 2, 
          Fill = r.runnableName == "NOTFOUND" ? brushArray[5] : _runnablecolour[r.runnableaddress.ToString("X")], 
          Stroke = Brushes.Black, 
          StrokeThickness = .4, 
          ToolTip = r.runnableName + " : " + r.startTime + " - " + r.endTime + ", Duration-" + (r.endTime - r.startTime) + "μs" 
         }; 
        } 
        switch (c.coreName) 
        { 
         case "core0": 

          if (!_myCanvas.Children.Contains(currentTaskRect)) 
          { 
           _myCanvas.Children.Add(currentTaskRect); 
           Canvas.SetLeft(currentTaskRect, horizonatlZoom * 40 * ((r.startTime)/scale)); 
           Canvas.SetBottom(currentTaskRect, 430 + tasklevel * (35 + (verticalZoom) * 4) + (verticalZoom) * 2); 
          } 
          break; 
         case "core1": 

          if (!_myCanvas.Children.Contains(currentTaskRect)) 
          { 
           _myCanvas.Children.Add(currentTaskRect); 
           Canvas.SetLeft(currentTaskRect, horizonatlZoom * 40 * ((r.startTime)/scale)); 
           Canvas.SetBottom(currentTaskRect, 230 + tasklevel * (35 + (verticalZoom) * 4) + (verticalZoom) * 2); 
          } 
          break; 
         case "core2": 

          if (!_myCanvas.Children.Contains(currentTaskRect)) 
          { 
           _myCanvas.Children.Add(currentTaskRect); 
           Canvas.SetLeft(currentTaskRect, horizonatlZoom * 40 * ((r.startTime)/scale)); 
           Canvas.SetBottom(currentTaskRect, 30 + tasklevel * (35 + (verticalZoom) * 4) + (verticalZoom) * 2); 
          } 
          break; 
         default: 

          if (!_myCanvas.Children.Contains(currentTaskRect)) 
          { 
           _myCanvas.Children.Add(currentTaskRect); 
           Canvas.SetLeft(currentTaskRect, horizonatlZoom * 40 * ((r.startTime)/scale)); 
           Canvas.SetBottom(currentTaskRect, 30 + tasklevel * (35 + (verticalZoom) * 4) + (verticalZoom) * 2); 
          } 
          break; 
        } 
       } 
      } 
     } 
+3

んでしたあなたはdGridデータソースを設定しますか?あなたはそれをクリアできませんか?グリッド内のアイテムを直接操作しようとするのではなく、 – BugFinder

+0

私は実際にあなたの質問を理解しませんでした。私はxamlのデータグリッドでデータをバインドしています。上記の関数では、データがクラスオブジェクトであるdGrid.items.add(data)を呼び出しています。 –

+0

いいえ、実際にはデータをバインドしていません。あなたはそれをDataGridのItemsコレクションにプッシュしています。データバインディングはItemsSourceプロパティとXAMLの{Binding}式を使用します。 WPFでWinFormsパターンを強制しています。あなたがやっていることは、WPFのやり方ではありません。あなたが達成したいと思われる効果についてはわかりませんが、これはDataTemplatesと単純なバインディングを使用することで実現できると確信しています。このコードは実際には複雑すぎます。 –

答えて

0

データはあなたがdGrid.Items.Clear(呼び出した後に再びデータグリッドのItemsコレクションに追加取得した場合)ビューモデル内の各coreListの_viewModel.coreListコレクションまたは/およびtaskListコレクションのいずれかをクリアしています。それはあなたがこれらのコレクションを反復処理しているのでクリアして、displayDetails方法でデータグリッドのItemsコレクションに追加された後、それ以外の場合は、同じ項目が明らかに再びデータグリッドに追加されます

...

関連する問題