[英]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.