在gridview上下文之外访问属性

时间:2018-07-30 14:00:28

标签: xaml uwp

为了学习UWP,我决定(尝试并)构建一个简单的纸牌游戏。我使用以下XAML在用户界面上展示卡片:

<Page.Resources>
    <vm:HoldemVM x:Name="viewModel"/>
</Page.Resources>

<GridView ItemsSource="{x:Bind holdemVM.Players}">
    <GridView.ItemTemplate>
        <DataTemplate x:DataType="models:Player">
            <Grid>
                <Grid.ColumnDefinitions>
                    <ColumnDefinition Width= "92"/>
                    <ColumnDefinition Width="260"/>
                </Grid.ColumnDefinitions>
                <Grid.RowDefinitions>
                    <RowDefinition Height="Auto"/>
                    <RowDefinition Height="*"/>
                </Grid.RowDefinitions>

                <localControls:PlayingCardControl Grid.Row="1" Grid.Column="0" Grid.ColumnSpan="2"
                                        CardHeight="{Binding viewModel.CardHeight }" 
                                        CardWidth="{Binding viewModel.CardWidth}"
                                        CardValue="{x:Bind Hand[0].CardValue, Mode=OneWay}"
                                        CardSuitValue="{x:Bind Hand[0].CardSuitValue, Mode=OneWay}">
                </localControls:PlayingCardControl>

                <localControls:PlayingCardControl Grid.Column="2" Grid.Row="1"
                                        CardHeight="{Binding viewModel.CardHeight }" 
                                        CardWidth="{Binding viewModel.CardWidth}"
                                        CardValue="{x:Bind Hand[1].CardValue, Mode=OneWay}"
                                        CardSuitValue="{x:Bind Hand[1].CardSuitValue, Mode=OneWay}">
                </localControls:PlayingCardControl>

            </Grid>
        </DataTemplate>
    </GridView.ItemTemplate>
</GridView

如您所见,我的用户控件具有CardWidth和CardHeight依赖项属性,我想通过ViewModel中包含的属性进行设置。 viewModel还包含一个称为Players的可观察集合,在该集合中,我提取卡牌并根据发给玩家的卡牌来调整值。 问题是我无法绑定到CardWidth / Height属性,因为我的网格视图的源设置为CardWidth / Height不属于其中的Players可观察集合。
上面列出的XAML可以按预期方式渲染卡片,但卡片宽度/高度无法从视图模型中获取更改后的属性。 我已经在网上进行了广泛的搜索,并尝试了许多建议的选项,但均无济于事。希望外面有人可以帮助我解决这个问题。 感谢您的协助。

1 个答案:

答案 0 :(得分:0)

好吧,我从另一个站点获得了解决方案。

按如下所示在绑定中将源更改为StaticResource:

<localControls:PlayingCardControl Grid.Row="1" Grid.Column="0" Grid.ColumnSpan="2"
                        CardHeight="{Binding CardHeight, Source={StaticResource viewModel}}" 
                        CardWidth="{Binding CardWidth, Source={StaticResource viewModel}}"
                        CardValue="{x:Bind Hand[0].CardValue, Mode=OneWay}"
                        CardSuitValue="{x:Bind Hand[0].CardSuitValue, Mode=OneWay}">
</localControls:PlayingCardControl>

谢谢您的时间。