The cameras generated in the new ViewControl are not displayed.

Hi,

I’m creating a view in my plugin that works as follows:

On one side, I load all the existing views into a combo box, and when a view is selected from that combo, I replicate it in a Grid below the combo.

The view I’m using for this test has 4 cameras. I manage to generate the view with those 4 layouts, and the cameras are inserted into them, but the problem is that they don’t connect.

I don’t know what I’m doing wrong.

namespace ImotionPlugin.Client.ViewItems.ViewLoader

{

public partial class ImotionViewItemLoaderlWpfUserControl : ViewItemWpfUserControl

{

private readonly ImotionViewItemLoaderManager \_viewItemManager;

private static List<ViewMilestone> \_listViews = new List<ViewMilestone>();

public ImotionViewItemLoaderlWpfUserControl(ImotionViewItemLoaderManager viewItemManager)

{

  \_viewItemManager = viewItemManager;

  InitializeComponent();

}

public override void Init()

{

  \_listViews = MilestoneViewLoader.Instance.GetViewSmartClient();

  foreach (var view in \_listViews)

  {

    ViewComboBox.Items.Add(new ComboBoxItem { Content = [view.Name](https://view.Name), Tag = view });

  }

}

private void ViewComboBox\_SelectionChanged(object sender, SelectionChangedEventArgs e)

{

  if (ViewComboBox.SelectedItem != null)

  {

    var item = (ComboBoxItem)ViewComboBox.SelectedItem;

    var view = (ViewMilestone)item.Tag;

    LoadView(view.Fqid.ObjectId, item.Content.ToString());

  }

}

private void LoadView(Guid viewId, string nameView)

{

  ViewGrid.Children.Clear();

  var viewLayoutItem = Configuration.Instance.GetItem(viewId, Kind.View) as ViewAndLayoutItem;

  if (viewLayoutItem != null)

  {

    List<ViewControlItem> viewControlItems = new List<ViewControlItem>();

    List<Item> items = new List<Item>();

    List<Rectangle> viewLayout = new List<Rectangle>(viewLayoutItem.Layout);

    int idx = 0;

    var hijos = viewLayoutItem.GetChildren();

    foreach (var item in viewLayoutItem.GetChildren())

    {

      if (item.FQID.Kind == Kind.ViewItemInstance)

      {

        if (item.Properties.TryGetValue("CameraId", out string cameraIdStr) && Guid.TryParse(cameraIdStr, out Guid cameraId))

        {

          var camara = Configuration.Instance.GetItem(cameraId, Kind.Camera);

          if (camara != null)

          {

            var control = new LiveCameraViewItem(camara.FQID, idx);

            viewControlItems.Add(control);

            idx++;

          }

        }

      }

    }

    var viewControl = ClientControl.Instance.GenerateViewControl(viewControlItems, viewLayout);

    ViewGrid.Children.Add(viewControl);

    ViewGrid.UpdateLayout();

  }

}

public override void Close()

{

}

}

public class LiveCameraViewItem : ViewControlItem

{

public LiveCameraViewItem(FQID cameraFQID, int indexInViewLayout)

  : base(indexInViewLayout)

{

  FQID = cameraFQID;

  ViewItemTypeId = Kind.Camera;

  Properties = new Dictionary<string, string>

  {

    { "CameraId", cameraFQID.ObjectId.ToString() },

    { "ViewItemPluginId", "VideoOS.View.Item.Live" } // Plugin de cámara en vivo

  };

}

public new FQID FQID { get; }

public new Dictionary<string, string> Properties { get; }

}

}

Smart Client Insert Camera plugin sample shows both creating a view and putting cameras in a view, I think it could be good inspiration on how to do what you ask.

https://doc.developer.milestonesys.com/html/index.html?base=samples/pluginsamples/scinsertcamera/readme.html&tree=tree_1.html