将按钮绑定到列表框项WPF

时间:2014-03-17 19:58:37

标签: c# wpf

我有一个包含列表框的GUI,该列表框包含类似于以下

的缺少第三方更新的行

enter image description here

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>

单击“安装”按钮后,我需要使用相关应用程序列表项的许多属性执行将触发安装的方法。

2 个答案:

答案 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,它应该包含您的对象及其属性。