小编RAB*_*RAB的帖子

UWP数据绑定:如何将按钮命令设置为DataTemplate内的父DataContext

需要的简短说明:我需要使用ViewModel的DataContext中的方法触发DataTemplate中的按钮命令.

问题的简短说明:模板化按钮命令似乎只能绑定到项目本身的datacontext.WPF和Windows 8.1应用程序用于浏览可视化树的语法似乎不起作用,包括ElementName和Ancestor绑定.我非常希望不让我的按钮命令位于MODEL内部.

附注:这是使用MVVM设计方法构建的.

以下代码生成VIEW上的项目列表.该列表是每个列表项的一个按钮.

            <ItemsControl x:Name="listView" Tag="listOfStories" Grid.Row="0" Grid.Column="1"
            ItemsSource="{x:Bind ViewModel.ListOfStories}"
            ItemTemplate="{StaticResource storyTemplate}"
            Background="Transparent"
            IsRightTapEnabled="False"
            IsHoldingEnabled="False"
            IsDoubleTapEnabled="False"
                 />
Run Code Online (Sandbox Code Playgroud)

在同一个VIEW的页面资源中,我创建了一个DataTemplate,其中包含有问题的按钮.我继续并删除了按钮内的大部分格式,例如文本,以使代码更易于阅读.除了列出的问题(命令的绑定)之外,关于按钮的所有内容都有效.

<Page.Resources>
        <DataTemplate x:Name="storyTemplate" x:DataType="m:Story">
            <Button
                Margin="0,6,0,0"
                Width="{Binding ColumnDefinitions[1].ActualWidth, ElementName=storyGrid, Mode=OneWay}"
                HorizontalContentAlignment="Stretch"
                CommandParameter="{Binding DataContext, ElementName=Page}"
                Command="{Binding Source={StaticResource Locator}}">

                <StackPanel HorizontalAlignment="Stretch" >
                    <TextBlock Text="{x:Bind StoryTitle, Mode=OneWay}"
                        FontSize="30"
                        TextTrimming="WordEllipsis"
                        TextAlignment="Left"/>
                </StackPanel>
            </Button>
        </DataTemplate>
    </Page.Resources>
Run Code Online (Sandbox Code Playgroud)

因为这是一个DataTemplate,所以DataContext已设置为组成列表(MODEL)的各个项目.我需要做的是选择列表本身的DataContext(VIEWMODEL),这样我就可以访问导航命令了.

如果您对VIEW页面的代码隐藏感兴趣,请参阅下文.

    public sealed partial class ChooseStoryToPlay_View : Page
    {
    public ChooseStoryToPlay_View()
    {
        this.InitializeComponent();
        this.DataContextChanged += (s, e) => { ViewModel = DataContext as ChooseStoryToPlay_ViewModel; };
    }
    public ChooseStoryToPlay_ViewModel …
Run Code Online (Sandbox Code Playgroud)

c# data-binding datacontext xaml uwp

7
推荐指数
1
解决办法
7244
查看次数

使用单个.click()激活多个函数?

我觉得这个答案很简单,但我无法弄清楚甚至要搜索什么.

我想要做的是让一个.click()事件按顺序触发两个函数.Function1清除目标区域,然后function2应该是.slideDown().

    function function1(){
    $(this).parents('#div').siblings().nextAll('#div').hide();
    };

function function2(){
    $(this).parents('#div').siblings().nextAll('#div').slideDown(1000);
    };

$("#div").click(function1 + function2);
Run Code Online (Sandbox Code Playgroud)

我试过以下,无济于事......

    $("#div").click(function1, function2);
    $("#div").click(function1,function2);
    $("#div").click(function1 + function2);
    $("#div").click(function1+function2);
Run Code Online (Sandbox Code Playgroud)

当function1和function2独立触发时,它们可以正常工作.只有当我试图将它们组合在一起时才会这样.

非常感谢你提前!

编辑:哦,#div标记只是地标选择器.

jquery

2
推荐指数
1
解决办法
1858
查看次数

标签 统计

c# ×1

data-binding ×1

datacontext ×1

jquery ×1

uwp ×1

xaml ×1