我有一个包含列表框的GUI,该列表框包含类似于以下
的缺少第三方更新的行
INSTALLBUTTON | POSTPONEBUTTON | Application Name ApplicationVersion Upgrade Message
INSTALLBUTTON | POSTPONEBUTTON | Application Name ApplicationVersion Upgrade Message
每行包含两个按钮(Install和Postpone)以及从列表中读入的几个属性(应用程序名称,版本,使用的延迟数量,以红色显示的消息)。列表框的datacontext是一个列表。
我无法弄清楚如何将Install和Postpone按钮绑定到应用程序/行。这是我目前的WPF:
<ListBox Name="ThirdPartyListBox" ItemsSource="{Binding}" Margin="0,70,0,0">
<ListBox.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal">
<Image Source="C:\Users\test\Desktop\Project\ACME-WPF\ACME-WPF\window-new-3.ico" Margin="5" Width="50"/>
<Button Name="ThirdPartyInstallButton" Content="Install" Click="InstallThirdPartyUpdatesButton_Click" Margin="5,5,0,0" Height="25"></Button>
<Button Name="ThirdPartyPostoneButton" Content="Postpone" Margin="5,5,0,0" Height="25"></Button>
<TextBlock FontWeight="Bold" Text="{Binding Item2.Name}" Margin="12,25,0,0"/>
<TextBlock FontWeight="Bold" Text="{Binding Item2.RequiredVersion}" Margin="3,25,0,0"/>
<TextBlock Text="{Binding Item2.CustomUIMessage}" Margin="10,25,0,0" TextWrapping="Wrap" Foreground="Red"/>
<TextBlock Text="You have used " Margin="3,25,0,0"/>
<TextBlock Text="{Binding Item3.UsedDeferrals}" Margin="3,25,0,0"/>
<TextBlock Text=" of " Margin="3,25,0,0"/>
<TextBlock Text="{Binding Item2.MaxDefferals}" Margin="3,25,0,0"/>
<TextBlock Text=" deferrals for this update." Margin="3,25,0,0"/>
</StackPanel>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
单击“安装”按钮后,我需要使用相关应用程序列表项的许多属性执行将触发安装的方法。
答案 0 :(得分:0)
而不是使用&#34; Click&#34;使用命令结构。要在命令中获取关联项的数据,请使用CommandParameter。
CommandParameter="{Binding Path=.}" Command="{Binding ElementName=Root, Path=DataContext.InstallComponentCommand}"
这假设Window&UserControl被称为&#34; Root&#34;。然后,在您的代码隐藏中设置一个&#34; DelegateCommand&#34;做这项工作。此博客文章包含有关如何设置的精彩教程:http://wpftutorial.net/DelegateCommand.html
绑定组件对象将显示为委托的对象参数。
<强>更新强>
在视图模型中:
public ICommand InstallComponentCommand {get; private set;}
//constructor
{
InstallComponentCommand = new DelegateCommand(p => InstallComponent(p));
}
private void InstallComponent(object data)
{
Component componentToInstall = (Component)data;
// Do whatever is necessary to install
}
只要禁用该按钮,就可以设置一个属性,如&#34; InstallInProgress&#34;绑定&#34; IsEnabled&#34;按钮的属性。
让我知道我是否可以澄清任何事情!
答案 1 :(得分:0)
在按钮的单击处理程序中,调用按钮.DataContext,它应该包含您的对象及其属性。