带有绑定的列表视图中的 wpf 按钮

wpf Button in listview with binding

我为 collection

清除了一种 class
public class inoutboundpd
{
    public string srcip { get; set; }
    public string srcport { get; set; }
    public string dstip { get; set; }
    public string dstport { get; set; }
    public string protocol { get; set; }
    public Button dpibutton { get; set; }
    public Button delbutton { get; set; }
}
ObservableCollection<inoutboundpd> _inboundp = new ObservableCollection<inoutboundpd>();
public ObservableCollection<inoutboundpd> inboundp
{
    get { return _inboundp; }
}  //*/

这是我未完成的来源 xaml

<ListView x:Name="policylistScrollViewer" ItemsSource="{Binding inboundp}"  HorizontalAlignment="Left" Height="169" VerticalAlignment="Bottom" ScrollViewer.VerticalScrollBarVisibility="Auto" Width="575">
    <ListView.View>
        <GridView>
            <GridViewColumn Header="Source IP" Width="110" DisplayMemberBinding="{Binding Path=srcip}" />
            <GridViewColumn Header="Protocol" Width="50" DisplayMemberBinding="{Binding Path=protocol}" />
            GridViewColumn Header="DPI" Width="40" >
            <GridViewColumn.CellTemplate>
                <DataTemplate>
                    <Button Content="DPI" Command="{Binding Path=dpibutton}"/>
                </DataTemplate>
            </GridViewColumn.CellTemplate>
        </GridViewColumn>
            <GridViewColumn Header="Delete" Width="40" CellTemplate="{DynamicResource delbutton}">
            </GridViewColumn>
        </GridView>
    </ListView.View>
</ListView>

这两个按钮不适合我的意图。 并且

Button bt = new Button();
bt.Content = "DPI";
bt.Tag = url + " " + image + " " + audio + " " + video + " " + word;
//bt.PreviewMouseDown += new MouseButtonEventHandler(dpiconfirm);
_inboundp.Add(new inoutboundpd { srcip = isip, srcport = isport, dstip = idip, dstport=idport , protocol=protocol, dpibutton=bt, delbutton=dbt });

这行不通。 如何将 bt 按钮绑定到列表视图按钮列? 我想使用事件 'dpiconfirm' 和 'Button.Tag 等动态地将按钮添加到列表视图列...

以下是形成有效解决方案的建议性评论摘要:

dpibutton 应该是一个 ICommand,而不是一个按钮。参见 ButtonBase.Command

public class inoutboundpd 
{
    public string srcip { get; set; }
    public string srcport { get; set; }
    public string dstip { get; set; }
    public string dstport { get; set; }
    public string protocol { get; set; }
    public ICommand dpibutton { get; set; }
    public ICommand delbutton { get; set; }
}

然后您必须在创建视图之前设置 ICommand 属性。为此,您必须创建实现 ICommand 的 类。确保 CanExecute() 实现 returns 为真。

我还建议从 MouseButtonEventHandlerICommand.Execute 调用一个公共私有函数来处理按钮点击。