[英]WPF User Control Dependency Property not working when bound to a ViewModel property
[英]WPF User Control with Dependency Property not working
我正在编写WPF应用程序,并具有一个用户控件和几个要在多个地方使用的数据网格。 在每个地方,我希望字体大小都不同。
这是我正在尝试的:
.xaml:
<UserControl x:Class="RoviPutt.Controls.Leaderboard"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
mc:Ignorable="d"
d:DesignHeight="605" d:DesignWidth="890">
<UserControl.Resources>
<Style TargetType="{x:Type DataGrid}" BasedOn="{StaticResource MetroDataGrid}">
<Setter Property="FontSize" Value="{Binding TextSize}"/>
</Style>
</UserControl.Resources>
<Grid>
<ma:FlipView IsBannerEnabled="False">
<ma:FlipView.Items>
<Grid>
<DataGrid ItemsSource="{Binding ShowOverall.Leaders}" Margin="50" BorderThickness="2">
<DataGrid.Columns>
<DataGridTextColumn Header="RANK" Binding="{Binding Rank}" Width="Auto"/>
<DataGridTextColumn Header="NAME" Binding="{Binding Name}" Width="*"/>
<DataGridTextColumn Header="COMPANY" Binding="{Binding Company}" Width="*"/>
<DataGridTextColumn Header="SCORE" Binding="{Binding Score, StringFormat=N2}" Width="Auto"/>
</DataGrid.Columns>
</DataGrid>
</Grid>
<Grid>
<DataGrid ItemsSource="{Binding SessionOverall.Leaders}" Margin="50" BorderThickness="2">
<DataGrid.Columns>
<DataGridTextColumn Header="RANK" Binding="{Binding Rank}" Width="Auto"/>
<DataGridTextColumn Header="NAME" Binding="{Binding Name}" Width="*"/>
<DataGridTextColumn Header="COMPANY" Binding="{Binding Company}" Width="*"/>
<DataGridTextColumn Header="SCORE" Binding="{Binding Score, StringFormat=N2}" Width="Auto"/>
</DataGrid.Columns>
</DataGrid>
</Grid>
</ma:FlipView.Items>
</ma:FlipView>
</Grid>
</UserControl>
.xaml.cs:
public partial class Leaderboard : UserControl
{
public Leaderboard()
{
InitializeComponent();
var vm = new LeaderboardViewModel();
vm.TextSize = TextSize;
DataContext = vm;
}
#region Dependency Properties
public int TextSize
{
get { return (int)GetValue(TextSizeProperty); }
set { SetValue(TextSizeProperty, value); }
}
public static readonly DependencyProperty TextSizeProperty =
DependencyProperty.Register("TextSize", typeof(int),
typeof(Leaderboard));
#endregion
}
ViewModel:
public class LeaderboardViewModel : BindableBase
{
public LeaderboardViewModel()
{
}
#region Properties
/// <summary>
/// Font size
/// </summary>
private int textSize;
public int TextSize
{
get { return textSize; }
set { SetProperty(ref textSize, value); }
}
/// <summary>
/// Show overall game score leaderboard
/// </summary>
private Leaderboard showOverall;
public Leaderboard ShowOverall
{
get { return showOverall; }
set { SetProperty(ref showOverall, value); }
}
/// <summary>
/// Session overall game score leaderboard
/// </summary>
private Leaderboard sessionOverall;
public Leaderboard SessionOverall
{
get { return sessionOverall; }
set { SetProperty(ref sessionOverall, value); }
}
#endregion
}
每当我使用以下方法设置TestSize属性时
<Leaderboard TextSize="20"/>
并检查.xaml.cs,我的TextSize为0。知道我在做什么错吗?
我假设绑定正在尝试在作为视图模型的DataContext
找到TextSize
属性,而不是在UserControl
自己的属性中。
尝试给您的UserControl
命名:
<UserControl .... x:Name="leaderBoard">
并将绑定更改为以下内容:
<Setter Property="FontSize" Value="{Binding TextSize, ElementName=leaderBoard}"/>
绑定有问题时,请始终检查Visual Studio的“输出”窗格。 绑定错误应在此处列出,并提示您可能有什么问题。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.