C# 控件模板中的绑定
我有一个下一个控件-日历。我从nuget WPControls那里得到的。 我修改了它,因为我今天需要一个按钮 下面是一个XAML代码:C# 控件模板中的绑定,c#,silverlight,xaml,windows-phone-7,windows-phone-8,C#,Silverlight,Xaml,Windows Phone 7,Windows Phone 8,我有一个下一个控件-日历。我从nuget WPControls那里得到的。 我修改了它,因为我今天需要一个按钮 下面是一个XAML代码: <ControlTemplate x:Key="CalendarControlTemplate1" TargetType="wpControls:Calendar"> <ScrollViewer> <Grid Height="auto" Background="Black">
<ControlTemplate x:Key="CalendarControlTemplate1" TargetType="wpControls:Calendar">
<ScrollViewer>
<Grid Height="auto" Background="Black">
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="Auto"/>
</Grid.ColumnDefinitions>
<TextBlock Text="{TemplateBinding YearMonthLabel}" FontSize="{StaticResource PhoneFontSizeMediumLarge}" Grid.Column="1" HorizontalAlignment="Center" VerticalAlignment="Center"/>
<Button
Content="<"
Width="100"
Grid.Column="0"
x:Name="PreviousMonthButton"
HorizontalAlignment="Left"
VerticalAlignment="Center"
Visibility="{Binding ShowNavigationButtons, Converter={StaticResource BooleanToVisibilityConverter}, RelativeSource={RelativeSource TemplatedParent}}"/>
<Button
Content=">"
Width="100"
Grid.Column="2"
x:Name="NextMonthButton"
HorizontalAlignment="Right"
VerticalAlignment="Center"
Visibility="{Binding ShowNavigationButtons, Converter={StaticResource BooleanToVisibilityConverter}, RelativeSource={RelativeSource TemplatedParent}}"/>
<Button Grid.Row="3" Grid.Column="1" x:Name="TodayButton" Content="{Binding Path=ButtonName}" HorizontalAlignment="Stretch" Height="100" VerticalAlignment="Bottom" Tap="Button_Tap" />
<Grid Height="auto" Grid.Row="2" Grid.Column="0" Grid.ColumnSpan="3" x:Name="ItemsGrid">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="*"/>
<RowDefinition Height="*"/>
<RowDefinition Height="*"/>
<RowDefinition Height="*"/>
<RowDefinition Height="*"/>
<RowDefinition Height="*"/>
<RowDefinition Height="*"/>
</Grid.RowDefinitions>
<TextBlock Text="{TemplateBinding Sunday}" HorizontalAlignment="Center" VerticalAlignment="Center" Grid.Column="1"/>
<TextBlock Text="{TemplateBinding Monday}" HorizontalAlignment="Center" VerticalAlignment="Center" Grid.Column="2"/>
<TextBlock Text="{TemplateBinding Tuesday}" HorizontalAlignment="Center" VerticalAlignment="Center" Grid.Column="3"/>
<TextBlock Text="{TemplateBinding Wednesday}" HorizontalAlignment="Center" VerticalAlignment="Center" Grid.Column="4"/>
<TextBlock Text="{TemplateBinding Thursday}" HorizontalAlignment="Center" VerticalAlignment="Center" Grid.Column="5"/>
<TextBlock Text="{TemplateBinding Friday}" HorizontalAlignment="Center" VerticalAlignment="Center" Grid.Column="6"/>
<TextBlock Text="{TemplateBinding Saturday}" HorizontalAlignment="Center" VerticalAlignment="Center" Grid.Column="7"/>
</Grid>
</Grid>
</ScrollViewer>
</ControlTemplate>
但它不起作用,为什么?如何修复它
这是我的C#代码:
您需要实现INPC(INotifyPropertyChanged),然后触发PropertyChanged事件。这将更新按钮 这正进入MVVM领域,有许多这样的框架可以帮助您实现这一点
Greg正如Greg所说,您需要有一个实现INotifyPropertyChange的数据上下文。 还有另一种肮脏的方式,希望能奏效。 1) 像这样更改代码
public string ButtonName{get;set;}
public CalendarPage()
{
InitializeComponent();
ButtonName = GS.translations["Today"];
}
Content="{Binding ElementName=YourUserControlName,Path=ButtonName}"
2) 还有你的Xaml之类的东西
public string ButtonName{get;set;}
public CalendarPage()
{
InitializeComponent();
ButtonName = GS.translations["Today"];
}
Content="{Binding ElementName=YourUserControlName,Path=ButtonName}"
你给你的用户名一个密钥了吗?比如x:Name或者x:key?应该应用于“YourUserControlName”是的。看起来是这样的:不。它将是承载按钮的控件名。假设它是一扇窗户。。内容将是content=“{Binding ElementName=myWindow,Path=ButtonName}”为您的窗口指定一个x:Name,并用它替换“YourUserControlName”。
Content="{Binding ElementName=YourUserControlName,Path=ButtonName}"