gpt4 book ai didi

c# - ListView 中的 WPF 按钮在 ViewModel 中看不到命令

转载 作者:太空狗 更新时间:2023-10-29 20:46:05 25 4
gpt4 key购买 nike

<StackPanel>
<!--<Button Command="{Binding GetOddsCommand}" CommandParameter="{Binding}" />-->

<ListView
ItemsSource="{Binding Links}"
>
<ListView.ItemTemplate>
<DataTemplate>
<Border>
<Button Command="{Binding GetOddsCommand}" CommandParameter="{Binding}">
<TextBlock >
<Hyperlink NavigateUri="http://www.onet.pl" >
<TextBlock Text="{Binding}" />
</Hyperlink>
</TextBlock>
</Button>
</Border>
</DataTemplate>
</ListView.ItemTemplate>

我有 MVVM 应用程序。在 View 模型中,我有 GetOddsCommand:

public ICommand GetOddsCommand
{
get
{
if (_getOddsCommand == null)
_getOddsCommand = new RelayCommand(param => GetOdds());
return _getOddsCommand;
}
}

private void GetOdds()
{

}

当我取消注释放置在 StackPanel 命令中的第一个按钮时效果很好。调试器进入 get,然后当我单击命令时,调试器进入 GetOdds 方法。但它在 ListView 中的第二个按钮中不起作用。看起来第二个按钮看不到 GetOddsCommand,但我不明白为什么

谢谢

最佳答案

放置一个按钮并在其中放置一个超链接没有多大意义……当您单击该超链接时,您期望发生什么?
无论如何,以下代码将导致调用您的命令:

<ListView ItemsSource="{Binding Links}" x:Name="ListView1">
<ListView.ItemTemplate>
<DataTemplate>
<Border>
<Button Command="{Binding ElementName=ListView1, Path=DataContext.GetOddsCommand}" CommandParameter="{Binding}">
<TextBlock Text="{Binding}" />
</Button>
</Border>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>

注意使用的 DataContext 是 ListView 的,不是 的 ListViewItem...
您可能希望对 CommandParameter 执行相同类型的绑定(bind) - 取决于您真正想要的。

现在,在里面添加超链接会导致问题——如果你点击超链接,按钮并没有被真正点击,所以你不会得到命令,如果你点击一个没有超链接的区域,一切都会好起来的。 .

如果您真的确实想要那里的超链接...您可以将周围文本 block 的IsHitTestVisible设置为false。

例如:

<TextBlock IsHitTestVisible="false">
<Hyperlink NavigateUri="http://www.onet.pl" >
<TextBlock Text="{Binding}" />
</TextBlock>

关于c# - ListView 中的 WPF 按钮在 ViewModel 中看不到命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14056939/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com