我有一个组合了许多数据表的资源字典。我在我的ResourceDictionary.MergedDictionaries
中将此资源字典包含为Page.Resources
。我的一个datatemplate是ListView
,当项目源和项目点击工作正常时,在{datatemplate中设置的ListViewItem
上的单独按钮不会调用我的click方法。我不确定如何正确设置。
此click方法在类后面的代码中定义,它定义了包含资源字典的页面Xaml,并使用我的datatemplate进行ListViewItem
s。
字典
Click="MyPages_ClickMethod"
页
MyPages_ClickMethod()
以下是我在datatemplate中设置按钮的方法:
<Button Tag="{Binding id}" Click="MultiShareSelectFileButton_Click" Background="Transparent" Visibility="{Binding multiShareSelected, Converter={StaticResource BooleanToVisibilityConverter}, ConverterParameter=Inverted, Mode=OneWay}">
<Image Width="27" Source="ms-appx:///Assets/sharePlusIcon@2x.png" VerticalAlignment="Center" HorizontalAlignment="Center">
</Image>
</Button>
是否可以在不使用ICommand的情况下执行此操作?
类似于:Click="{x:Bind Path=pages:ProductPage.MultiShareSelectFileButton_Click}"
,但这是抱怨MultiShareSelectFileButton_Click
应该是静态的
答案 0 :(得分:1)
我会对它做出正确的决定。这是问题,
您的DataTemplate
位于资源字典中。如果可能的话,资源字典是为样式和转换器而制作的。建议不要将DataTemplate
放在资源字典中。
app.xaml
中定义资源字典,该资源字典会在您的初始屏幕出现时运行。<Application.ResourceDictionary>
app.xaml
BoolToVisibilityConverter
部分合并的资源词典中,那么它会产生重大影响在你的应用发布时间,这将破坏用户的体验。CustomRoundButtonStyle
或page/userControl
,您只能使用<Page.Resources>
中的一个DataTemplate
。那么加载样式或转换器是没有意义的其他3页。所以你应该在<Page.Resources>
中声明它们。 x:DataType="Models:YourDataContextModel"
,如果您只想使用一次,可以全局声明它。而是向你的DataTemplate
声明它。您的问题将立即解决,因为您的Page将具有代码隐藏功能,因此您的xaml将知道在哪里查找该方法。那是事情出错的地方。 但是,如果您在以下所有视图中使用单个DataTemplate,那么您的解决方案就是:
如果您必须在资源字典中使用它,请使用{x:Bind}和 <DataTemplate x:Key="HelloTemplate" x:DataType="yourDefinedNameSpace:YourModel">
<Button Click="{x:Bind GoFetchData}"/>
</DataTemplate>
将YourModel
绑定到您的模型。通过这种方式,您的xaml将确切地知道在单击时查找方法的位置。
以下是它的一个示例:
namespace
internal void GoFetchData()
存在于case when instr(:P1_USERNAME,'>') > 0
then substr(:P1_USERNAME, 1, instr(:P1_USERNAME,'>')-1)
else :P1_USERNAME
end
中,定义为&#34; yourDefinedNameSpace&#34;在xaml中它包含一个签名方法:my_pkg.cleanup (:P1_USERNAME)
我希望这会有所帮助。如果您有任何疑问,请随意使用评论部分
答案 1 :(得分:0)
我发现也有必要在Xaml中指定ClickMode =“ Press”。
<Button Content="" Focusable="True" FontFamily="Segoe UI Symbol" FontSize="16" Background="{StaticResource HeroLightGray}" Foreground="Black" HorizontalAlignment="Center" VerticalAlignment="Center"
ClickMode="Press"
Command="{Binding DataContext.CopyMetadataSourceAsync, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type UserControl}}}" CommandParameter="{Binding .}" />
我不记得以前必须这样做,但是在花了数小时进行故障排除,将RelayCommand转换为IAsyncCommand等之后,这是唯一可行的方法。实际上,除非我添加了ClickMode =“ Press”,否则我什至无法触发常规的“ Click event”方法背后的代码!