为了学习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可以按预期方式渲染卡片,但卡片宽度/高度无法从视图模型中获取更改后的属性。
我已经在网上进行了广泛的搜索,并尝试了许多建议的选项,但均无济于事。希望外面有人可以帮助我解决这个问题。
感谢您的协助。
答案 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>
谢谢您的时间。