效果图:

代码:
页面:
<navigation:Page x:Class="mircomodels3.MetricNode.MetricNode"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d"
xmlns:vm="clr-namespace:mircomodels3.MetricNode"
xmlns:navigation="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.Navigation"
xmlns:telerik="http://schemas.telerik.com/2008/xaml/presentation"
xmlns:i="http://schemas.microsoft.com/expression/2010/interactivity"
xmlns:Prism="clr-namespace:Microsoft.Practices.Composite.Presentation.Commands;assembly=Microsoft.Practices.Composite.Presentation"
xmlns:Command="clr-namespace:GalaSoft.MvvmLight.Command;assembly=GalaSoft.MvvmLight.Extras.SL4"
xmlns:ViewModel="clr-namespace:mircomodels3.ViewModel"
xmlns:MetricNode="clr-namespace:mircomodels3.MetricNode" xmlns:invoke="clr-namespace:mircomodels3"
xmlns:NodeModel="clr-namespace:mircomodels3.MetricNode.appClass" Title="MetricNode Page">
<!--<telerik:RadWindow.Resources>
<Datablocks:BinaryToImageConverter x:Key="binaryToImageConverter" />
<Popup:TypeToNameConverter x:Key="typeToNameConverter" />
</telerik:RadWindow.Resources>-->
<!--<UserControl.Resources>
< Command:EventToCommand Prism:Click.Command="{Binding Path=Save}" x:Key="Import" />
</UserControl.Resources>-->
<UserControl.Resources>
<NodeModel:DataContextProxy x:Key="dataContextProxy" DataContext="{Binding Object}"/>
</UserControl.Resources>
<Grid x:Name="LayoutRoot" DataContext="{Binding Object}">
<i:Interaction.Triggers>
<i:EventTrigger EventName ="Loaded">
<i:InvokeCommandAction Command="{Binding Path=LoadAll}"></i:InvokeCommandAction>
</i:EventTrigger>
</i:Interaction.Triggers>
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="*"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
<telerik:RadComboBox Name="rcbType" Width="200" HorizontalAlignment="Left">
<telerik:RadComboBoxItem Content="MetricName"/>
<telerik:RadComboBoxItem Content="ParameterType"/>
<i:Interaction.Triggers>
<i:EventTrigger EventName ="SelectionChanged">
<i:InvokeCommandAction Command="{Binding Path=RcbTypeSelectionChanged}" CommandParameter="{Binding ElementName=rcbType}"></i:InvokeCommandAction>
</i:EventTrigger>
</i:Interaction.Triggers>
</telerik:RadComboBox>
<telerik:RadGridView Name="radGridView1" Grid.Row="1" AutoGenerateColumns="False" CanUserFreezeColumns="False" ShowGroupPanel="False" SelectionMode="Single">
<i:Interaction.Triggers>
<i:EventTrigger EventName ="BeginningEdit">
<i:InvokeCommandAction Command="{Binding Path=RadGridViewBeginningEdit}" CommandParameter="{Binding ElementName=radGridView1}"></i:InvokeCommandAction>
</i:EventTrigger>
<i:EventTrigger EventName ="SelectionChanged">
<i:InvokeCommandAction Command="{Binding Path=RadGridViewSelectionChanged}" CommandParameter="{Binding ElementName=radGridView1}"></i:InvokeCommandAction>
</i:EventTrigger>
</i:Interaction.Triggers>
<telerik:RadGridView.Columns>
<telerik:GridViewDataColumn Header="UserName" Width="*" DataMemberBinding="{Binding Path=UserName}" IsReadOnly="True"/>
<telerik:GridViewDataColumn Header="RegExpName" Width="*" DataMemberBinding="{Binding Path=Regex}"/>
<telerik:GridViewDataColumn Header="Type" Width="*">
<telerik:GridViewColumn.CellTemplate>
<DataTemplate>
<TextBlock Text="{Binding Type}" />
</DataTemplate>
</telerik:GridViewColumn.CellTemplate>
<telerik:GridViewColumn.CellEditTemplate>
<DataTemplate>
<telerik:RadComboBox Name="rcbType" SelectedIndex="{Binding Type}">
<telerik:RadComboBoxItem Content="MetricName"/>
<telerik:RadComboBoxItem Content="Custom"/>
</telerik:RadComboBox>
</DataTemplate>
</telerik:GridViewColumn.CellEditTemplate>
</telerik:GridViewDataColumn>
<telerik:GridViewDataColumn Header="Icon">
<telerik:GridViewColumn.CellTemplate>
<DataTemplate>
<Image Source="{Binding Icon}" Width="20" Height="20" Stretch="Uniform" Margin="0"/>
</DataTemplate>
</telerik:GridViewColumn.CellTemplate>
<telerik:GridViewColumn.CellEditTemplate>
<DataTemplate>
<telerik:RadButton Name="btnUpload" Command = "{Binding Path=BtnUploadClick}" DataContext="{Binding Source={StaticResource dataContextProxy}, Path=DataContext}" CommandParameter="{Binding RelativeSource={RelativeSource Self}}" >
<Image Source="{Binding Icon}" Width="20" Height="20" Stretch="Uniform" Margin="0"/>
</telerik:RadButton>
</DataTemplate>
</telerik:GridViewColumn.CellEditTemplate>
</telerik:GridViewDataColumn>
<telerik:GridViewColumn Header="aaa">
<telerik:GridViewColumn.CellTemplate>
<DataTemplate>
<telerik:RadButton Content="Delete" Command = "{Binding Path=Save}" DataContext="{Binding Source={StaticResource dataContextProxy}, Path=DataContext}" CommandParameter="{Binding RelativeSource={RelativeSource Self}}">
</telerik:RadButton>
</DataTemplate>
</telerik:GridViewColumn.CellTemplate>
</telerik:GridViewColumn>
<telerik:GridViewDataColumn IsReadOnly="True">
<telerik:GridViewColumn.CellTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal">
<HyperlinkButton Name="hlEdit" Content="Edit" Command = "{Binding Path=HlEditClick}" DataContext="{Binding Source={StaticResource dataContextProxy}, Path=DataContext}" CommandParameter="{Binding RelativeSource={RelativeSource Self}}">
</HyperlinkButton>
<HyperlinkButton Name="hlCommit" Content="Commit" Visibility="Collapsed" Command = "{Binding Path=HlCommitClick}" DataContext="{Binding Source={StaticResource dataContextProxy}, Path=DataContext}" CommandParameter="{Binding RelativeSource={RelativeSource Self}}"/>
<HyperlinkButton Name="hlCancel" Content="Cancel" Visibility="Collapsed" Command = "{Binding Path=HlCancelClick}" DataContext="{Binding Source={StaticResource dataContextProxy}, Path=DataContext}" CommandParameter="{Binding RelativeSource={RelativeSource Self}}"/>
</StackPanel>
</DataTemplate>
</telerik:GridViewColumn.CellTemplate>
</telerik:GridViewDataColumn>
<telerik:GridViewColumn>
<telerik:GridViewColumn.CellTemplate>
<DataTemplate>
<HyperlinkButton Name="hlDelete" Content="Delete" Command = "{Binding Path=HlDeleteClick}" DataContext="{Binding Source={StaticResource dataContextProxy}, Path=DataContext}" CommandParameter="{Binding RelativeSource={RelativeSource Self}}" />
</DataTemplate>
</telerik:GridViewColumn.CellTemplate>
</telerik:GridViewColumn>
</telerik:RadGridView.Columns>
</telerik:RadGridView>
<telerik:RadDataPager x:Name="radDataPager" Grid.Row="2" PageSize="10" Margin="0,1,0,0" >
<i:Interaction.Triggers>
<i:EventTrigger EventName ="PageIndexChanged">
<i:InvokeCommandAction Command="{Binding Path=PageIndexChanged}" CommandParameter="{Binding ElementName=radDataPager}"></i:InvokeCommandAction>
</i:EventTrigger>
</i:Interaction.Triggers>
</telerik:RadDataPager>
<!--<StackPanel Orientation="Vertical">-->
<telerik:RadButton Name="btnInsert" Grid.Row="3" Content="Add new item" HorizontalAlignment="Left">
<i:Interaction.Triggers>
<i:EventTrigger EventName ="Click">
<i:InvokeCommandAction Command="{Binding Path=BtnInsertClick}" CommandParameter="{Binding ElementName=radGridView1}"></i:InvokeCommandAction>
</i:EventTrigger>
</i:Interaction.Triggers>
</telerik:RadButton>
</Grid>
</navigation:Page>
.cs文件
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Net;
using System.Text;
using System.Windows;
using System.Windows.Browser;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Shapes;
using System.Windows.Navigation;
using System.Xml.Linq;
using Telerik.Windows.Controls;
using eMite.Silverlight.Data.wsEmite;
using mircomodels3.MetricNode.Mode;
namespace mircomodels3.MetricNode
{
public partial class MetricNode : Page
{
public MetricNode(EmiteWebServiceClient wsEmiteClient)
{
InitializeComponent();
this.DataContext = MetricNode.CreateModel(radDataPager, radGridView1, wsEmiteClient,rcbType);
}
public static MetricNodeViewModel CreateModel(Telerik.Windows.Controls.RadDataPager radDataPager, Telerik.Windows.Controls.RadGridView radGridView, EmiteWebServiceClient wsEmiteClient, Telerik.Windows.Controls.RadComboBox radComboBox)
{
MetricNodeService metricService=new MetricNodeService();
return new MetricNodeViewModel(metricService, radDataPager,radGridView,wsEmiteClient,radComboBox);
}
}
}
viewmodel
using System;
using System.Net;
using System.Threading;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Ink;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Shapes;
using MicroModels;
using mircomodels3.MetricNode.Mode;
namespace mircomodels3.MetricNode
{
public class MetricNodeViewModel:MicroModel
{
public MetricNodeViewModel(MetricNodeService mns, Telerik.Windows.Controls.RadDataPager radDataPager, Telerik.Windows.Controls.RadGridView radGridView, EmiteWebServiceClient wsEmiteClient,Telerik.Windows.Controls.RadComboBox radComboBox)
{
Command("RcbTypeSelectionChanged", (object sender) => mns.RcbTypeSelectionChanged(sender));
Command("RadGridViewBeginningEdit", (object sender) => mns.RadGridViewBeginningEdit(sender));
Command("RadGridViewSelectionChanged", (object sender) => mns.RadGridViewSelectionChanged(sender));
Command("BtnUploadClick", (object sender) => mns.BtnUploadClick(sender));
Command("PageIndexChanged", (object sender) => mns.PageIndexChanged(sender));
Command("BtnInsertClick", (object sender) => mns.BtnInsertClick(sender));
Command("LoadAll", () => mns.GetAllMetricNodeIcon(radDataPager, radGridView, wsEmiteClient,radComboBox));
Command("Save", () => MessageBox.Show("dsdsa"));
Command("HlEditClick",(object sender)=>mns.HlEditClick(sender));
Command("HlCommitClick", (object sender) =>mns.HlCommitClick(sender));
Command("HlCancelClick", (object sender) =>mns.HlCancelClick(sender));
Command("HlDeleteClick", (object sender) => mns.HlDeleteClick(sender));
Command("ExportToCSV", () => mns.ExportToCSV());
Command("CSVImport", () => mns.CSVImport());
}
}
}
Service
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.IO;
using System.Linq;
using System.Net;
using System.ServiceModel;
using System.Text;
using System.Threading;
using System.Windows;
using System.Windows.Browser;
using System.Windows.Controls;
using System.Windows.Controls.Primitives;
using System.Windows.Documents;
using System.Windows.Ink;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Shapes;
using Telerik.Windows.Controls;
using Telerik.Windows.Controls.GridView;
using eMite.Silverlight.Data;
using eMite.Silverlight.Data.wsEmite;
using mircomodels3.MetricNode.Mode;
using mircomodels3.MetricNode.appClass;
using SelectionChangedEventArgs = Telerik.Windows.Controls.SelectionChangedEventArgs;
namespace mircomodels3.MetricNode
{
public class MetricNodeService
{
private EmiteWebServiceClient _wsEmiteClient;
private Telerik.Windows.Controls.RadGridView _radGridView;
private Telerik.Windows.Controls.RadDataPager _radDataPager;
private Telerik.Windows.Controls.RadComboBox _rcbType;
readonly DataProvider _provider = new DataProvider(new EmiteWcfFactory());
private bool _isInsert;
private GridViewCellBase _pastCell;
private GridViewRowItem _pastRow;
private object _item;
private byte[] _imageBytes;
private ClientMetricNodeIcon _removeItem;
private ObservableCollection<MetricNodeIconDto> _mnIcons;
private bool _isUpload = false;
public ObservableCollection<ClientMetricNode> _NodeData;
public object _DataContext;
public MetricNode metricNode;
public void GetAllMetricNodeIcon(Telerik.Windows.Controls.RadDataPager radDataPager,Telerik.Windows.Controls.RadGridView radGridView,EmiteWebServiceClient wsEmiteClient,Telerik.Windows.Controls.RadComboBox radComboBox)
{
_wsEmiteClient = wsEmiteClient;
//_metricNode = metricNode;
_radGridView = radGridView;
_radDataPager = radDataPager;
_rcbType = radComboBox;
var mniRequest = new MetricNodeIconRequest()
{
Start = 1,
End = radDataPager.PageSize,
};
TempToken.CreateScopeAndSecurityToken(wsEmiteClient.InnerChannel);
_wsEmiteClient.GetMetricNodeIconsCompleted -= _wsEmiteClient_GetMetricNodeIconsCompleted;
_wsEmiteClient.GetMetricNodeIconsCompleted += _wsEmiteClient_GetMetricNodeIconsCompleted;
_wsEmiteClient.GetMetricNodeIconsAsync(mniRequest);
}
private void _wsEmiteClient_GetMetricNodeIconsCompleted(object sender, GetMetricNodeIconsCompletedEventArgs e)
{
if (e.Error == null)
{
if (e.Result != null && e.Result.Count > 0)
{
var reponse = e.Result;
_radDataPager.ItemCount = reponse.Count;
//_radGridView.ItemsSource = reponse.MetricNodeIcons.ToList();
var cmnis = reponse.MetricNodeIcons.Select(mni => new ClientMetricNodeIcon()
{
IconId = mni.IconId,
Icon = mni.Icon,
Regex = mni.Regex,
Type = mni.Type,
UserName = mni.UserName
}).ToList();
_radGridView.ItemsSource = cmnis;
_radGridView.Columns[4].IsVisible = false;
}
}
}
public void RcbTypeSelectionChanged(object sender)
{
Telerik.Windows.Controls.RadComboBox rcbType = sender as Telerik.Windows.Controls.RadComboBox;
_rcbType = rcbType;
if (_mnIcons == null || _mnIcons.Count == 0)
{
var mniRequest = new MetricNodeIconRequest
{
Op = rcbType.SelectedIndex + 1,
Start = 1,
End = _radDataPager.PageSize,
};
GetMetricNodeIcons(mniRequest);
}
else
{
var cmnis = new ObservableCollection<ClientMetricNodeIcon>();
foreach (MetricNodeIconDto mni in _mnIcons.Where(n => n.Type == rcbType.SelectedIndex + 1).Take(_radDataPager.PageSize))
{
cmnis.Add(new ClientMetricNodeIcon
{
IconId = mni.IconId,
Icon = mni.Icon,
Regex = mni.Regex,
Type = mni.Type,
UserName = mni.UserName
});
}
_radDataPager.ItemCount = _mnIcons.Count(n => n.Type == 1);
_radDataPager.PageIndex = 0;
_radGridView.ItemsSource = cmnis;
}
}
private void GetMetricNodeIcons(MetricNodeIconRequest mniRequest)
{
_wsEmiteClient=new EmiteWebServiceClient();
TempToken.CreateScopeAndSecurityToken(_wsEmiteClient.InnerChannel);
_wsEmiteClient.GetMetricNodeIconsCompleted -= _wsEmiteClient_GetMetricNodeIconsCompleted;
_wsEmiteClient.GetMetricNodeIconsCompleted += _wsEmiteClient_GetMetricNodeIconsCompleted;
_wsEmiteClient.GetMetricNodeIconsAsync(mniRequest);
}
public void RadGridViewBeginningEdit(object sender)
{
Telerik.Windows.Controls.RadGridView radGridView = sender as Telerik.Windows.Controls.RadGridView;
if (_pastRow == null || _pastRow != ((GridViewDataControl)(sender)).CurrentCell.ParentRow)
{
_pastRow = ((GridViewDataControl)(sender)).CurrentCell.ParentRow;
GridViewCellBase cell = _pastRow.Cells[2];
IList<HyperlinkButton> list = cell.ChildrenOfType<HyperlinkButton>();
foreach (HyperlinkButton hlbtn in list)
{
hlbtn.Visibility = hlbtn.Content.ToString() == "Edit" ? Visibility.Collapsed : Visibility.Visible;
}
}
if (_pastRow != null && _pastRow == ((GridViewDataControl)(sender)).CurrentCell.ParentRow)
{
//pastRow = ((GridViewDataControl)(sender)).CurrentCell.ParentRow;
GridViewCellBase cell = _pastRow.Cells[2];
IList<HyperlinkButton> list = cell.ChildrenOfType<HyperlinkButton>();
foreach (HyperlinkButton hlbtn in list)
{
hlbtn.Visibility = hlbtn.Content.ToString() == "Edit" ? Visibility.Collapsed : Visibility.Visible;
}
}
}
public void RadGridViewSelectionChanged(object sender)
{
Telerik.Windows.Controls.RadGridView radGridView1 = sender as Telerik.Windows.Controls.RadGridView;
var row = radGridView1.ItemContainerGenerator.ContainerFromItem(radGridView1.SelectedItem) as GridViewRow;
if (row == null) return;
if (_pastCell == null)
{
_pastCell = row.Cells[2];
return;
}
IList<HyperlinkButton> list = _pastCell.ChildrenOfType<HyperlinkButton>();
foreach (HyperlinkButton hlbtn in list)
{
hlbtn.Visibility = hlbtn.Content.ToString() == "Edit" ? Visibility.Visible : Visibility.Collapsed;
}
if (!_isInsert)
radGridView1.CancelEdit();
else
{
_isInsert = false;
}
_pastCell = row.Cells[2];
}
public void BtnUploadClick(object sender)
{
//Telerik.Windows.Controls.RadGridView radGridView1 = sender as Telerik.Windows.Controls.RadGridView;
_isUpload = true;
_item =(((FrameworkElement) (((FrameworkElement) (((FrameworkElement) (sender)).Parent)).Parent)).DataContext);
//_item = radGridView1.SelectedItem;
//var item =((Telerik.Windows.Controls.RadRowItem)
// (((Telerik.Windows.Controls.GridView.GridViewCellBase)
// ((((Button) (sender)).Parent))).ParentRow)).Item;
var dlg = new OpenFileDialog
{
Filter = "Image Files(*.gif;*.jpg;*.jpeg;*.png)|*.gif;*.jpg;*.jpeg;*.png",
Multiselect = false
};
dlg.ShowDialog();
if (dlg.File == null) return;
Stream inputStream = dlg.File.OpenRead();
//tempStream = inputStream;
long length = inputStream.Length;
_imageBytes = new byte[length];
var reader = new BinaryReader(inputStream);
_imageBytes = reader.ReadBytes(Convert.ToInt32(length));
if (_item != null)
{
var clientMetricNodeIcon = _item as ClientMetricNodeIcon;
if (clientMetricNodeIcon != null && clientMetricNodeIcon.IconId != 0)
{
var mni = new MetricNodeIconRequest
{
Start = 1,
End = _radDataPager.PageSize,
};
TempToken.CreateScopeAndSecurityToken(_wsEmiteClient.InnerChannel);
_wsEmiteClient.GetMetricNodeIconsCompleted -= _wsEmiteClient_GetMetricNodeIconsCompleted;
_wsEmiteClient.GetMetricNodeIconsCompleted += _wsEmiteClient_GetMetricNodeIconsCompleted;
_wsEmiteClient.GetMetricNodeIconsAsync(mni);
}
else if (clientMetricNodeIcon != null && clientMetricNodeIcon.IconId == 0)
{
clientMetricNodeIcon.Icon = _imageBytes;
}
}
}
public void PageIndexChanged(object sender)
{
Telerik.Windows.Controls.RadDataPager radDataPager = sender as Telerik.Windows.Controls.RadDataPager;
_radDataPager = radDataPager;
if (_radGridView == null) return;
if (_radGridView.Items != null && _radGridView.Items.Count > 0 && _mnIcons == null)
{
var mniRequest = new MetricNodeIconRequest
{
Start = radDataPager.PageIndex * _radDataPager.PageSize + 1,
End = radDataPager.PageIndex * _radDataPager.PageSize + _radDataPager.PageSize,
};
GetMetricNodeIcons(mniRequest);
}
else
{
BindGridview();
}
}
private void BindGridview()
{
var cmnis = new ObservableCollection<ClientMetricNodeIcon>();
foreach (
MetricNodeIconDto mni in
_mnIcons.Where(n => n.Type == _rcbType.SelectedIndex + 1).Skip(_radDataPager.PageSize * _radDataPager.PageIndex).
Take(_radDataPager.PageSize))
{
cmnis.Add(new ClientMetricNodeIcon
{
IconId = mni.IconId,
Icon = mni.Icon,
Regex = mni.Regex,
Type = mni.Type,
UserName = mni.UserName
});
}
_radGridView.ItemsSource = cmnis;
_radDataPager.ItemCount = _mnIcons.Count(n => n.Type == _rcbType.SelectedIndex + 1);
}
public void BtnInsertClick(object sender)
{
Telerik.Windows.Controls.RadGridView radGridView1 = sender as Telerik.Windows.Controls.RadGridView;
_isInsert = true;
radGridView1.BeginInsert();
}
public void HlEditClick(object sender)
{
var children = ((Panel)(((ButtonBase)(sender)).Parent)).Children;
foreach (UIElement child in children)
{
child.Visibility = ((ContentControl)child).Content.ToString() == "Edit" ? Visibility.Collapsed : Visibility.Visible;
}
((GridViewCell)(((StackPanel)((((ButtonBase)(sender)).Parent))).Parent)).ParentRow.IsSelected = true;
}
public void HlCommitClick(object sender)
{
_radGridView.RowEditEnded += RadGridView1RowEditEnded;
_radGridView.CommitEdit();
var children = ((Panel)(((ButtonBase)(sender)).Parent)).Children;
foreach (UIElement child in children)
{
child.Visibility = ((ContentControl)child).Content.ToString() == "Edit" ? Visibility.Visible : Visibility.Collapsed;
}
}
private void RadGridView1RowEditEnded(object sender, GridViewRowEditEndedEventArgs e)
{
var newdata = e.NewData as ClientMetricNodeIcon;
_item = newdata;
if (newdata == null) return;
if (e.EditOperationType == GridViewEditOperationType.Edit)
{
var mni = new MetricNodeIconRequest
{
Op = 1,
MetricNodeIcon = new MetricNodeIconDto
{
IconId = newdata.IconId,
Icon = newdata.Icon,
Regex = newdata.Regex,
Type = newdata.Type,
UserName = "admin"
//ModelLocator.Instance.UserManager.LoggedInUser.UserName
}
};
SaveMetricNodeIcon(mni);
}
if (e.EditOperationType == GridViewEditOperationType.Insert)
{
var mni = new MetricNodeIconRequest
{
Op = 0,
MetricNodeIcon = new MetricNodeIconDto
{
IconId = newdata.IconId,
Icon = newdata.Icon,
Regex = newdata.Regex,
Type = _rcbType.SelectedIndex + 1,
UserName = "admin"
//ModelLocator.Instance.UserManager.LoggedInUser.UserName
}
};
SaveMetricNodeIcon(mni);
}
_radGridView.RowEditEnded -= RadGridView1RowEditEnded;
}
private void SaveMetricNodeIcon(MetricNodeIconRequest mni)
{
TempToken.CreateScopeAndSecurityToken(_wsEmiteClient.InnerChannel);
InvokerBase invoker = _provider.CreateInvoker("", App.pageBinding, App.webServiceURL);
//AsyncCallback asyncCallback = SaveMetricNodeIconEventCallBack;
//invoker.SaveMetricNodeIconAsync(mni, asyncCallback);
invoker.Dispose();
}
public void HlCancelClick(object sender)
{
_radGridView.CancelEdit();
var children = ((Panel)(((ButtonBase)(sender)).Parent)).Children;
foreach (UIElement child in children)
{
child.Visibility = ((ContentControl)child).Content.ToString() == "Edit" ? Visibility.Visible : Visibility.Collapsed;
}
}
public void HlDeleteClick(object sender)
{
var removeItem =
((GridViewCellBase)(((ButtonBase)(sender)).Parent)).ParentRow.Item as ClientMetricNodeIcon;
if (removeItem == null)
{
_radGridView.CancelEdit();
return;
}
//var removeItem = radGridView1.SelectedItem as ClientMetricNodeIcon;
if (removeItem.IconId == 0)
{
try
{
((ObservableCollection<ClientMetricNodeIcon>)_radGridView.ItemsSource).Remove(removeItem);
}
catch (Exception)
{
_radGridView.CancelEdit();
}
}
else if (removeItem.IconId != 0)
{
_removeItem = removeItem;
((List<ClientMetricNodeIcon>)_radGridView.ItemsSource).Remove(removeItem);
var mni = new MetricNodeIconRequest
{
Op = 2,
MetricNodeIcon = new MetricNodeIconDto
{
IconId = removeItem.IconId
}
};
SaveMetricNodeIcon(mni);
}
}
public void ExportToCSV()
{
string extension = "csv";
SaveFileDialog dialog = new SaveFileDialog()
{
DefaultExt = extension,
Filter = String.Format("{1} files (*.{0})|*.{0}|All files (*.*)|*.*", extension, "CSV"),
FilterIndex = 1
};
if (dialog.ShowDialog() == true)
{
using (Stream stream = dialog.OpenFile())
{
_radGridView.Export(stream,
new GridViewExportOptions()
{
Format = ExportFormat.Csv,
ShowColumnHeaders = true,
ShowColumnFooters = true,
ShowGroupFooters = false,
});
}
}
}
public void CSVImport()
{
OpenFileDialog dlg = new OpenFileDialog()
{
Filter = "Csv Files (*.csv)|*.csv|All Files (*.*)|*.*",
};
if (true == dlg.ShowDialog())
{
//myList.DataContext = dlg.Files;
FileInfo fi = dlg.File;
if (fi != null)
{
using (Stream stream = fi.OpenRead())
{
List<ClientMetricNodeIcon> metricNodeIcons = new List<ClientMetricNodeIcon>();
StreamReader fileReader = new StreamReader(stream);
string strLine = "";
string[] tempString = new string[4];
while (strLine != null)
{
strLine = fileReader.ReadLine();
if (strLine != null && strLine.Length > 0)
{
//ls.Add(strLine.Split(','));
ClientMetricNodeIcon metricNode = new ClientMetricNodeIcon();
tempString = strLine.Split(',');
metricNode.UserName = tempString[0];
metricNode.Regex = tempString[1];
try
{
metricNode.Type = Convert.ToInt16(tempString[2]);
}
catch (Exception err)
{
metricNode.Type = 0;
}
try
{
byte[] byteArry = new byte[0];
byteArry = System.Text.Encoding.UTF8.GetBytes(tempString[3]);
//string str = System.Text.Encoding.UTF8.GetString(byteArry);
metricNode.Icon = byteArry;
}
catch (Exception err)
{
}
metricNodeIcons.Add(metricNode);
}
}
fileReader.Close();
_radGridView.ItemsSource = metricNodeIcons;
stream.Close();
}
}
}
}
}
}
本文介绍了一个使用XAML构建的MetricNode页面,包括导航、控件资源、交互触发器、数据绑定、命令操作等核心组件的设计与实现细节。详细展示了如何通过XAML实现页面布局、数据展示、事件响应等功能。
2542





