diff options
| author | Roy Ben-Shabat <Roy@Twine-s.com> | 2018-04-11 14:50:47 +0300 |
|---|---|---|
| committer | Roy Ben-Shabat <Roy@Twine-s.com> | 2018-04-11 14:50:47 +0300 |
| commit | c400fa026cdb2bc5c1c5c25f5bfae37461e87cab (patch) | |
| tree | 07c9d4027e82ecfdd3be47ecd2a79369210097f6 /Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI | |
| parent | f33393bff08e57360953143e6bb93aa8eb03a852 (diff) | |
| download | Tango-c400fa026cdb2bc5c1c5c25f5bfae37461e87cab.tar.gz Tango-c400fa026cdb2bc5c1c5c25f5bfae37461e87cab.zip | |
Added Disconnect & Connect requests.
Fixed issue with Machine Connection View Scanning.
Fixed issue with ShowModalDialog close event..
Added ConnectedMachineView.
Added TransferRate for Adapters.
Diffstat (limited to 'Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI')
9 files changed, 280 insertions, 62 deletions
diff --git a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Html/HtmlWindow.xaml b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Html/HtmlWindow.xaml index d7032cedc..f984a985f 100644 --- a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Html/HtmlWindow.xaml +++ b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Html/HtmlWindow.xaml @@ -18,7 +18,7 @@ <Grid> <DockPanel> <Grid DockPanel.Dock="Bottom"> - <Button Margin="10" Width="140" HorizontalAlignment="Right" Click="OKClicked">OK</Button> + <Button Margin="10" Width="140" HorizontalAlignment="Right" Click="OKClicked">RESOLVE</Button> </Grid> <WebBrowser x:Name="webBrowser" OverridesDefaultStyle="False" diff --git a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Notifications/DefaultNotificationProvider.cs b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Notifications/DefaultNotificationProvider.cs index 1c9b8732f..cb36d8d29 100644 --- a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Notifications/DefaultNotificationProvider.cs +++ b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Notifications/DefaultNotificationProvider.cs @@ -112,14 +112,16 @@ namespace Tango.MachineStudio.UI.Notifications dialog.DataContext = context; Action onAcceptAction = null; + Action onCancelAction = null; + onAcceptAction = new Action(() => { dialog.Close(); onAccept(context); context.Accepted -= onAcceptAction; + context.Canceled -= onCancelAction; }); - Action onCancelAction = null; onCancelAction = new Action(() => { dialog.Close(); @@ -129,6 +131,7 @@ namespace Tango.MachineStudio.UI.Notifications onCancel(); } + context.Accepted -= onAcceptAction; context.Canceled -= onCancelAction; }); @@ -163,14 +166,16 @@ namespace Tango.MachineStudio.UI.Notifications dialog.DataContext = context; Action onAcceptAction = null; + Action onCancelAction = null; + onAcceptAction = new Action(() => { dialog.Close(); onAccept(context); context.Accepted -= onAcceptAction; + context.Canceled -= onCancelAction; }); - Action onCancelAction = null; onCancelAction = new Action(() => { dialog.Close(); @@ -180,6 +185,7 @@ namespace Tango.MachineStudio.UI.Notifications onCancel(); } + context.Accepted -= onAcceptAction; context.Canceled -= onCancelAction; }); @@ -213,14 +219,16 @@ namespace Tango.MachineStudio.UI.Notifications dialog.DataContext = context; Action onAcceptAction = null; + Action onCancelAction = null; + onAcceptAction = new Action(() => { dialog.Close(); onAccept(context); context.Accepted -= onAcceptAction; + context.Canceled -= onCancelAction; }); - Action onCancelAction = null; onCancelAction = new Action(() => { dialog.Close(); @@ -231,6 +239,7 @@ namespace Tango.MachineStudio.UI.Notifications } context.Canceled -= onCancelAction; + context.Accepted -= onAcceptAction; }); context.Accepted += onAcceptAction; @@ -279,15 +288,18 @@ namespace Tango.MachineStudio.UI.Notifications } dialog.DataContext = context; + Action onCancelAction = null; Action onAcceptAction = null; + onAcceptAction = new Action(() => { dialog.Close(); onAccept(context); + + context.Canceled -= onCancelAction; context.Accepted -= onAcceptAction; }); - Action onCancelAction = null; onCancelAction = new Action(() => { dialog.Close(); @@ -298,6 +310,7 @@ namespace Tango.MachineStudio.UI.Notifications } context.Canceled -= onCancelAction; + context.Accepted -= onAcceptAction; }); context.Accepted += onAcceptAction; diff --git a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Tango.MachineStudio.UI.csproj b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Tango.MachineStudio.UI.csproj index c13970674..eb4139936 100644 --- a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Tango.MachineStudio.UI.csproj +++ b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Tango.MachineStudio.UI.csproj @@ -159,6 +159,7 @@ <DependentUpon>MessageBoxWindow.xaml</DependentUpon> </Compile> <Compile Include="SupervisingController\IMainView.cs" /> + <Compile Include="ViewModels\ConnectedMachineViewVM.cs" /> <Compile Include="ViewModels\LoadingViewVM.cs" /> <Compile Include="ViewModels\LoginViewVM.cs" /> <Compile Include="ViewModels\MachineConnectionViewVM.cs" /> @@ -169,6 +170,9 @@ <Compile Include="ViewModels\ModuleWindowVM.cs" /> <Compile Include="ViewModels\ShutdownViewVM.cs" /> <Compile Include="ViewModels\UpdateViewVM.cs" /> + <Compile Include="Views\ConnectedMachineView.xaml.cs"> + <DependentUpon>ConnectedMachineView.xaml</DependentUpon> + </Compile> <Compile Include="Views\LoadingView.xaml.cs"> <DependentUpon>LoadingView.xaml</DependentUpon> </Compile> @@ -234,6 +238,10 @@ <Generator>MSBuild:Compile</Generator> <SubType>Designer</SubType> </Page> + <Page Include="Views\ConnectedMachineView.xaml"> + <SubType>Designer</SubType> + <Generator>MSBuild:Compile</Generator> + </Page> <Page Include="Views\LoadingView.xaml"> <SubType>Designer</SubType> <Generator>MSBuild:Compile</Generator> diff --git a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/ViewModelLocator.cs b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/ViewModelLocator.cs index bbb916d02..97eb2913b 100644 --- a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/ViewModelLocator.cs +++ b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/ViewModelLocator.cs @@ -82,6 +82,7 @@ namespace Tango.MachineStudio.UI SimpleIoc.Default.Register<ShutdownViewVM>(); SimpleIoc.Default.Register<LoginViewVM>(); SimpleIoc.Default.Register<MachineConnectionViewVM>(); + SimpleIoc.Default.Register<ConnectedMachineViewVM>(); SimpleIoc.Default.Register<MachineLoginViewVM>(); SimpleIoc.Default.Register<UpdateViewVM>(); @@ -133,6 +134,14 @@ namespace Tango.MachineStudio.UI } } + public ConnectedMachineViewVM ConnectedMachineViewVM + { + get + { + return ServiceLocator.Current.GetInstance<ConnectedMachineViewVM>(); + } + } + public MachineLoginViewVM MachineLoginViewVM { get diff --git a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/ViewModels/ConnectedMachineViewVM.cs b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/ViewModels/ConnectedMachineViewVM.cs new file mode 100644 index 000000000..9f84cfb53 --- /dev/null +++ b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/ViewModels/ConnectedMachineViewVM.cs @@ -0,0 +1,36 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Tango.BL.Entities; +using Tango.Core.Commands; +using Tango.MachineStudio.Common.Notifications; +using Tango.MachineStudio.Common.StudioApplication; +using Tango.SharedUI; + +namespace Tango.MachineStudio.UI.ViewModels +{ + public class ConnectedMachineViewVM : DialogViewVM + { + private IStudioApplicationManager _applicationManager; + public IStudioApplicationManager ApplicationManager + { + get { return _applicationManager; } + set { _applicationManager = value; RaisePropertyChangedAuto(); } + } + + public RelayCommand DisconnectCommand { get; set; } + + public ConnectedMachineViewVM(IStudioApplicationManager application) + { + ApplicationManager = application; + DisconnectCommand = new RelayCommand(Disconnect); + } + + private void Disconnect() + { + Accept(); + } + } +} diff --git a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/ViewModels/MainViewVM.cs b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/ViewModels/MainViewVM.cs index f9bffae29..f78cc15be 100644 --- a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/ViewModels/MainViewVM.cs +++ b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/ViewModels/MainViewVM.cs @@ -384,70 +384,42 @@ namespace Tango.MachineStudio.UI.ViewModels /// </summary> private void ConnectToMachine() { - _notificationProvider.ShowModalDialog<MachineConnectionViewVM>(async (x) => + if (ApplicationManager.ConnectedMachine == null) { - if (x.SelectedMachine != null) + _notificationProvider.ShowModalDialog<MachineConnectionViewVM>(async (x) => { - if (ApplicationManager.IsMachineConnected) + if (x.SelectedMachine != null) { - using (_notificationProvider.PushTaskItem("Disconnecting...")) + if (ApplicationManager.IsMachineConnected) { - await ApplicationManager.ConnectedMachine.Disconnect(); - await Task.Delay(1000); - } - } - - if (x.SelectedMachine.RequiresAuthentication) - { - _notificationProvider.ShowModalDialog<MachineLoginViewVM>(async (login) => - { - using (NotificationProvider.PushTaskItem("Connecting to machine " + x.SelectedMachine.ToString() + "...")) + using (_notificationProvider.PushTaskItem("Disconnecting...")) { - try - { - await x.SelectedMachine.Connect(); - - var authenticated = await x.SelectedMachine.As<IExternalBridgeSecureClient>().Authenticate(login.Password); - if (!authenticated) - { - _notificationProvider.ShowError("It seems like you are not authorized to access the selected machine."); - } - else - { - ApplicationManager.ConnectedMachine = x.SelectedMachine; - PostMessage(new MachineConnectionChangedMessage() { Machine = x.SelectedMachine }); - _eventLogger.Log(String.Format("Successfully connected to machine {0} via TCP", x.SelectedMachine.SerialNumber)); - } - } - catch (Exception ex) - { - LogManager.Log(ex); - _eventLogger.Log(ex, "Error connecting to machine " + x.SelectedMachine.SerialNumber); - _notificationProvider.ShowError(ex.Message); - } - - InvalidateRelayCommands(); + await ApplicationManager.ConnectedMachine.Disconnect(); + await Task.Delay(1000); } - }); - } - else - { - _notificationProvider.ShowModalDialog<MachineSerialViewVM>(async (vm) => + } + + if (x.SelectedMachine.RequiresAuthentication) { - if (vm.SelectedMachine != null) + _notificationProvider.ShowModalDialog<MachineLoginViewVM>(async (login) => { - using (NotificationProvider.PushTaskItem("Connecting to " + x.SelectedMachine.ToString() + "...")) + using (NotificationProvider.PushTaskItem("Connecting to machine " + x.SelectedMachine.ToString() + "...")) { try { await x.SelectedMachine.Connect(); - x.SelectedMachine.SerialNumber = vm.SelectedMachine.SerialNumber; - ApplicationManager.ConnectedMachine = x.SelectedMachine; - PostMessage(new MachineConnectionChangedMessage() { Machine = x.SelectedMachine }); - _eventLogger.Log(String.Format("Successfully connected to machine {0} via USB", x.SelectedMachine.SerialNumber)); - SettingsManager.Default.MachineStudio.LastVirtualMachineSerialNumber = vm.SelectedMachine.SerialNumber; - SettingsManager.SaveDefaultSettings(); + var authenticated = await x.SelectedMachine.As<IExternalBridgeSecureClient>().Authenticate(login.Password); + if (!authenticated) + { + _notificationProvider.ShowError("It seems like you are not authorized to access the selected machine."); + } + else + { + ApplicationManager.ConnectedMachine = x.SelectedMachine; + PostMessage(new MachineConnectionChangedMessage() { Machine = x.SelectedMachine }); + _eventLogger.Log(String.Format("Successfully connected to machine {0} via TCP", x.SelectedMachine.SerialNumber)); + } } catch (Exception ex) { @@ -458,15 +430,55 @@ namespace Tango.MachineStudio.UI.ViewModels InvalidateRelayCommands(); } - } - }); + }); + } + else + { + _notificationProvider.ShowModalDialog<MachineSerialViewVM>(async (vm) => + { + if (vm.SelectedMachine != null) + { + using (NotificationProvider.PushTaskItem("Connecting to " + x.SelectedMachine.ToString() + "...")) + { + try + { + await x.SelectedMachine.Connect(); + x.SelectedMachine.SerialNumber = vm.SelectedMachine.SerialNumber; + ApplicationManager.ConnectedMachine = x.SelectedMachine; + + PostMessage(new MachineConnectionChangedMessage() { Machine = x.SelectedMachine }); + _eventLogger.Log(String.Format("Successfully connected to machine {0} via USB", x.SelectedMachine.SerialNumber)); + SettingsManager.Default.MachineStudio.LastVirtualMachineSerialNumber = vm.SelectedMachine.SerialNumber; + SettingsManager.SaveDefaultSettings(); + } + catch (Exception ex) + { + LogManager.Log(ex); + _eventLogger.Log(ex, "Error connecting to machine " + x.SelectedMachine.SerialNumber); + _notificationProvider.ShowError(ex.Message); + } + + InvalidateRelayCommands(); + } + } + }); + } + + InvalidateRelayCommands(); } InvalidateRelayCommands(); - } + }); + } + else + { + _notificationProvider.ShowModalDialog<ConnectedMachineViewVM>((x) => + { + DisconnectFromMachine(); + }); + } - InvalidateRelayCommands(); - }); + InvalidateRelayCommands(); } /// <summary> @@ -581,6 +593,7 @@ namespace Tango.MachineStudio.UI.ViewModels { if (ApplicationManager.ConnectedMachine != null && machineEvent.EventType.Resolvable) { + _eventLogger.Log(String.Format("Event '{0}' resolved by user.", machineEvent.EventType.Name)); await ApplicationManager.ConnectedMachine.ResolveEvent((PMR.Diagnostics.EventType)machineEvent.Type); } } diff --git a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Views/ConnectedMachineView.xaml b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Views/ConnectedMachineView.xaml new file mode 100644 index 000000000..797d4dcb0 --- /dev/null +++ b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Views/ConnectedMachineView.xaml @@ -0,0 +1,111 @@ +<UserControl x:Class="Tango.MachineStudio.UI.Views.ConnectedMachineView" + xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" + xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" + xmlns:mahapps="http://metro.mahapps.com/winfx/xaml/controls" + xmlns:materialDesign="http://materialdesigninxaml.net/winfx/xaml/themes" + xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" + xmlns:integration="clr-namespace:Tango.Integration.Services;assembly=Tango.Integration" + xmlns:converters="clr-namespace:Tango.SharedUI.Converters;assembly=Tango.SharedUI" + xmlns:controls="clr-namespace:Tango.SharedUI.Controls;assembly=Tango.SharedUI" + xmlns:d="http://schemas.microsoft.com/expression/blend/2008" + xmlns:local="clr-namespace:Tango.MachineStudio.UI.Views" + mc:Ignorable="d" + d:DesignHeight="300" d:DesignWidth="300" Width="600" Height="400" Background="White" DataContext="{Binding ConnectedMachineViewVM, Source={StaticResource Locator}}"> + + <UserControl.Resources> + <converters:BooleanToVisibilityConverter x:Key="BooleanToVisibilityConverter"></converters:BooleanToVisibilityConverter> + <converters:BooleanToVisibilityInverseConverter x:Key="BooleanToVisibilityInverseConverter"></converters:BooleanToVisibilityInverseConverter> + <converters:BooleanInverseConverter x:Key="BooleanInverseConverter"></converters:BooleanInverseConverter> + <converters:ByteArrayToFileSizeConverter x:Key="ByteArrayToFileSizeConverter" /> + </UserControl.Resources> + + <Grid> + <Grid> + <Grid.RowDefinitions> + <RowDefinition Height="80"/> + <RowDefinition Height="1*"/> + </Grid.RowDefinitions> + + <Grid> + <StackPanel Orientation="Horizontal" Margin="10"> + <ContentControl Content="{Binding ApplicationManager.ConnectedMachine}"> + <ContentControl.Resources> + <DataTemplate DataType="{x:Type integration:ExternalBridgeTcpClient}"> + <Image Source="/Images/external-bridge-tcp.png" Width="48" Height="48" RenderOptions.BitmapScalingMode="Fant"></Image> + </DataTemplate> + + <DataTemplate DataType="{x:Type integration:ExternalBridgeUsbClient}"> + <Image Source="/Images/external-bridge-usb.png" Width="48" Height="48" RenderOptions.BitmapScalingMode="Fant"></Image> + </DataTemplate> + </ContentControl.Resources> + </ContentControl> + + <TextBlock Text="Machine Connection" VerticalAlignment="Center" Margin="10 0 0 0" FontSize="20"></TextBlock> + </StackPanel> + </Grid> + + <Grid Grid.Row="1" Margin="10 0 10 10"> + <Grid.RowDefinitions> + <RowDefinition Height="1*"/> + <RowDefinition Height="50"/> + </Grid.RowDefinitions> + + <Grid> + <ContentControl Content="{Binding ApplicationManager.ConnectedMachine}"> + <ContentControl.Resources> + <DataTemplate DataType="{x:Type integration:ExternalBridgeTcpClient}"> + <controls:TableGrid RowHeight="30"> + <TextBlock FontWeight="SemiBold" Text="Serial Number:" /> + <TextBlock Text="{Binding SerialNumber}" /> + <TextBlock FontWeight="SemiBold" Text="Name:" /> + <TextBlock Text="{Binding Machine.Name}" /> + <TextBlock FontWeight="SemiBold" Text="Organization:" /> + <TextBlock Text="{Binding Machine.Organization.Name}" /> + <TextBlock FontWeight="SemiBold" Text="IP Address:" /> + <TextBlock Text="{Binding IPAddress}" /> + <TextBlock FontWeight="SemiBold" Text="Total Bytes Sent:" /> + <TextBlock Text="{Binding Adapter.TotalBytesSent,Converter={StaticResource ByteArrayToFileSizeConverter},Mode=OneWay}" /> + <TextBlock FontWeight="SemiBold" Text="Total Bytes Received:" /> + <TextBlock Text="{Binding Adapter.TotalBytesReceived,Converter={StaticResource ByteArrayToFileSizeConverter},Mode=OneWay}" /> + <TextBlock FontWeight="SemiBold" Text="Transfer Rate:" /> + <TextBlock> + <Run Text="{Binding Adapter.TransferRate,Converter={StaticResource ByteArrayToFileSizeConverter},Mode=OneWay}"></Run> + <Run Text="/ second"></Run> + </TextBlock> + </controls:TableGrid> + </DataTemplate> + + <DataTemplate DataType="{x:Type integration:ExternalBridgeUsbClient}"> + <controls:TableGrid RowHeight="30"> + <TextBlock FontWeight="SemiBold" Text="Serial Number:" /> + <TextBlock Text="{Binding SerialNumber}" /> + <TextBlock FontWeight="SemiBold" Text="Name:" /> + <TextBlock Text="{Binding Machine.Name}" /> + <TextBlock FontWeight="SemiBold" Text="Organization:" /> + <TextBlock Text="{Binding Machine.Organization.Name}" /> + <TextBlock FontWeight="SemiBold" Text="COM Port:" /> + <TextBlock Text="{Binding ComPort}" /> + <TextBlock FontWeight="SemiBold" Text="Device:" /> + <TextBlock Text="{Binding Device}" /> + <TextBlock FontWeight="SemiBold" Text="Total Bytes Sent:" /> + <TextBlock Text="{Binding Adapter.TotalBytesSent,Converter={StaticResource ByteArrayToFileSizeConverter},Mode=OneWay}" /> + <TextBlock FontWeight="SemiBold" Text="Total Bytes Received:" /> + <TextBlock Text="{Binding Adapter.TotalBytesReceived,Converter={StaticResource ByteArrayToFileSizeConverter},Mode=OneWay}" /> + <TextBlock FontWeight="SemiBold" Text="Transfer Rate:" /> + <TextBlock> + <Run Text="{Binding Adapter.TransferRate,Converter={StaticResource ByteArrayToFileSizeConverter},Mode=OneWay}"></Run> + <Run Text="/ second"></Run> + </TextBlock> + </controls:TableGrid> + </DataTemplate> + </ContentControl.Resources> + </ContentControl> + </Grid> + + <Grid Grid.Row="1"> + <Button HorizontalAlignment="Right" Width="140" Command="{Binding DisconnectCommand}">DISCONNECT</Button> + </Grid> + </Grid> + </Grid> + </Grid> +</UserControl> diff --git a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Views/ConnectedMachineView.xaml.cs b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Views/ConnectedMachineView.xaml.cs new file mode 100644 index 000000000..cc8ac2237 --- /dev/null +++ b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Views/ConnectedMachineView.xaml.cs @@ -0,0 +1,28 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows; +using System.Windows.Controls; +using System.Windows.Data; +using System.Windows.Documents; +using System.Windows.Input; +using System.Windows.Media; +using System.Windows.Media.Imaging; +using System.Windows.Navigation; +using System.Windows.Shapes; + +namespace Tango.MachineStudio.UI.Views +{ + /// <summary> + /// Interaction logic for ConnectedMachineView.xaml + /// </summary> + public partial class ConnectedMachineView : UserControl + { + public ConnectedMachineView() + { + InitializeComponent(); + } + } +} diff --git a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Views/MachineConnectionView.xaml b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Views/MachineConnectionView.xaml index 1626e67ef..6f0a74805 100644 --- a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Views/MachineConnectionView.xaml +++ b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Views/MachineConnectionView.xaml @@ -70,7 +70,7 @@ <Run FontWeight="Bold">IP Address:</Run> <Run Text="{Binding IPAddress,Mode=OneWay}"></Run> </TextBlock> <TextBlock FontSize="11"> - <Run FontWeight="Bold">Organization:</Run> <Run Text="{Binding Organization,Mode=OneWay}"></Run> + <Run FontWeight="Bold">Organization:</Run> <Run Text="{Binding Machine.Organization.Name,Mode=OneWay}"></Run> </TextBlock> </StackPanel> </StackPanel> |
