現在我想通過WPF開發一個Windows服務控制檯程序。每項服務都在一個listview項目中。 HTTP:控制檯的圖像的
鏈路//i.stack.imgur.com/eMX1d.jpg 因此,我定義如下的類:如何綁定列表視圖中每個按鈕的點擊事件?
/// <summary>
///
/// </summary>
class ServiceItem
{
#region Fields
/// <summary>
/// Service Name
/// </summary>
private string _serviceName;
/// <summary>
/// Start Button
/// </summary>
private Button _startButton;
/// <summary>
/// Pause Button
/// </summary>
private Button _pauseButton;
/// <summary>
/// Stop Button
/// </summary>
private Button _stopButton;
#endregion
#region Properties
/// <summary>
/// Service Controller
/// </summary>
private ServiceController Service
{
get
{
var services = ServiceController.GetServices();
var service = services.AsQueryable().Where(o => o.ServiceName == _serviceName).Select(o => o).FirstOrDefault();
return service;
}
}
/// <summary>
/// Service Display Name
/// </summary>
public string ServiceDisplayName
{
get { return Service.DisplayName; }
}
/// <summary>
/// Service Name
/// </summary>
private string ServiceName
{
get { return Service.ServiceName; }
}
/// <summary>
/// Service Current Status
/// </summary>
public string Status
{
get
{
var status = Service.Status;
switch (status)
{
case ServiceControllerStatus.StartPending:
return "StartPending";
case ServiceControllerStatus.Running:
return "Running";//
case ServiceControllerStatus.PausePending:
return "PausePending";//
case ServiceControllerStatus.Paused:
return "Paused";//
case ServiceControllerStatus.StopPending:
return "StopPending";//
case ServiceControllerStatus.Stopped:
return "Stopped";//
default:
return "Unknow";//
}
}
}
/// <summary>
/// Service Start Mode
/// </summary>
public string StartMode
{
get
{
var startMode = ServiceHelper.GetServiceStartMode(_serviceName);
switch (startMode)
{
case ServiceStartMode.Automatic:
return "Automatically";//
case ServiceStartMode.Disabled:
return "Disabled";//
case ServiceStartMode.Manual:
return "Manual";//
default:
return "Unkown";//
}
}
}
/// <summary>
/// Start Button
/// </summary>
public Button StartButton
{
get
{
return _startButton;
}
}
/// <summary>
/// Pause Button
/// </summary>
public Button PauseButton
{
get
{
return _pauseButton;
}
}
/// <summary>
/// Stop Button
/// </summary>
public Button StopButton
{
get
{
return _stopButton;
}
}
#endregion
#region Constructor
/// <summary>
/// Init Service Instance
/// </summary>
public ServiceItem(string serviceName)
{
_serviceName = serviceName;
_startButton = new Button();
_pauseButton = new Button();
_stopButton = new Button();
_startButton.Content = Resources.Media_Play;
_pauseButton.Content = Resources.Media_Pause;
_stopButton.Content = Resources.Media_Stop;
_startButton.IsEnabled = Service.Status != ServiceControllerStatus.Running;
_pauseButton.IsEnabled = Service.Status != ServiceControllerStatus.Paused;
_stopButton.IsEnabled = Service.Status != ServiceControllerStatus.Stopped;
_startButton.Click += StartButton_Click;
_pauseButton.Click += PauseButton_Click;
_stopButton.Click += StopButton_Click;
}
#endregion
#region Methods
/// <summary>
/// Start Service
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
public void StartButton_Click(object sender, RoutedEventArgs e)
{
ServiceHelper.StartService(Service);
}
/// <summary>
/// Stop Service
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
public void StopButton_Click(object sender, RoutedEventArgs e)
{
ServiceHelper.StopService(Service);
}
/// <summary>
/// Pause Service
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
public void PauseButton_Click(object sender, RoutedEventArgs e)
{
ServiceHelper.PauseService(Service);
}
/// <summary>
/// Continue Service
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
public void ResumeButton_Click(object sender, RoutedEventArgs e)
{
ServiceHelper.ResumeService(Service);
}
#endregion
}
和相應的列表視圖XAML是如下:
<ListView x:Name="ServiceList" Background="#353535" BorderBrush="#353535" Foreground="White" Height="295" ItemsSource="{Binding}">
<ListView.View>
<GridView AllowsColumnReorder="True">
<GridView.Columns>
<GridViewColumn Width="auto" Header="Name" DisplayMemberBinding="{Binding ServiceDisplayName}"></GridViewColumn>
<GridViewColumn Width="auto" Header="Status" DisplayMemberBinding="{Binding Status}"></GridViewColumn>
<GridViewColumn Width="auto" Header="StartMode" DisplayMemberBinding="{Binding StartMode}"></GridViewColumn>
<GridViewColumn Width="auto" Header="Operation">
<GridViewColumn.CellTemplate>
<DataTemplate>
<Grid x:Name="grdOperations" x:Uid="grdOperations">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"></ColumnDefinition>
<ColumnDefinition Width="*"></ColumnDefinition>
<ColumnDefinition Width="*"></ColumnDefinition>
</Grid.ColumnDefinitions>
<Button Grid.Column="0" Height="24" Width="24" Style="{StaticResource ImageButton}" >
<Image Source="Resources/Media Play.png"></Image>
</Button>
<Button Grid.Column="1" Height="24" Width="24" Margin="1,0,1,0" Style="{StaticResource ImageButton}">
<Image Source="Resources/Media Pause.png"></Image>
</Button>
<Button Grid.Column="2" Height="24" Width="24" Style="{StaticResource ImageButton}">
<Image Source="Resources/Media Stop.png"></Image>
</Button>
</Grid>
</DataTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>
</GridView.Columns>
</GridView>
</ListView.View>
</ListView>
我創建的ServiceItem實例收集,並將其綁定到ListView:
var services = new List<ServiceItem>()
{
new ServiceItem("AxInstSV"),
new ServiceItem("PeerDistSvc")
};
ServiceList.ItemsSource = services;
現在問題是如何counld /我應該將開始/暫停/停止事件方法綁定到每個按鈕?
_italic_ Thanks!_italic_ – 2012-04-09 02:10:15