带有绑定的列表视图中的 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 为真。
我还建议从 MouseButtonEventHandler
和 ICommand.Execute
调用一个公共私有函数来处理按钮点击。
我为 collection
清除了一种 classpublic 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 为真。
我还建议从 MouseButtonEventHandler
和 ICommand.Execute
调用一个公共私有函数来处理按钮点击。