2013-12-11 43 views
0

我正在开发我的第一个Windows 8应用程序,在一个页面中,我试图用页面加载时的最新时间戳更新按钮文本。我定义我的XAML和代码隐藏象下面这样:按钮文本模板数据绑定不起作用

我使用数据绑定更新按钮上的文字,但预期它不工作:

MainPage.xaml中

<Grid Background="{StaticResource ApplicationPageBackgroundThemeBrush}"> 
    <Button HorizontalAlignment="Left" Margin="333,284,0,0" VerticalAlignment="Top" Height="69" Width="162"> 
     <Button.Resources> 
      <DataTemplate x:Key="DataTemplate1"> 
       <Grid> 
        <TextBlock HorizontalAlignment="Left" TextWrapping="Wrap" Text="{Binding ButtonText}" VerticalAlignment="Top" Foreground="#FFFF6800" Height="34" Margin="-30,0,-22,-14" Width="115"/> 
       </Grid> 
      </DataTemplate> 
     </Button.Resources> 
     <Button.ContentTemplate> 
      <StaticResource ResourceKey="DataTemplate1"/> 
     </Button.ContentTemplate> 
    </Button> 

</Grid> 

MainPage.xaml中的.cs

public StatsClass Stats { get; private set; } 

    public MainPage() 
    { 
     this.InitializeComponent(); 
     this.DataContext = Stats; 
    } 

    protected override void OnNavigatedTo(NavigationEventArgs e) 
    { 
     UpdateButton(); 
    } 

    private void UpdateButton() 
    { 
     if (Stats == null) 
      Stats = new StatsClass(); 

     Stats.ButtonText = DateTime.Now.ToString(); 
    } 

StatsClass.cs

public class StatsClass : INotifyPropertyChanged 
{ 
    private string _buttonText; 
    public string ButtonText 
    { 
     get 
     { 
      return _buttonText; 
     } 

     set 
     { 
      _buttonText = value; 
      OnPropertyChanged("ButtonText"); 
     } 
    } 

    public event PropertyChangedEventHandler PropertyChanged; 
    protected void OnPropertyChanged(string name) 
    { 
     if (PropertyChanged != null) 
      PropertyChanged(this, new PropertyChangedEventArgs(name)); 
    } 
} 
+0

我想你将不得不打电话给你的主页更改 –

+0

@SandeepChauhan不,你不会 – markmnl

回答

1

你与Content="Button",然后重新设置你的按钮的内容两次,一次。 Button.ContentTemplate。你可以只有:

<Button HorizontalAlignment="Left" Margin="333,284,0,0" VerticalAlignment="Top" Height="69" Width="162"> 
    <Grid> 
     <TextBlock HorizontalAlignment="Left" TextWrapping="Wrap" Text="{Binding ButtonText}" VerticalAlignment="Top" Foreground="#FFFF6800" Height="34" Margin="-30,0,-22,-14" Width="115"/> 
    </Grid> 
</Button> 
+0

抱歉,这是一个错字,我改变了它 - 但它没有触发绑定。 – Mahender

+0

你有没有在你的属性设置器中放置一个断点来验证它是否被设置,你有没有监测到绑定错误的调试输出? – markmnl

+0

感谢有关绑定错误的提示。确实,它有一个错误 - 修正是在绑定定义中添加ElementName。 – Mahender

0

我昨天有一个类似的问题,在DataTemplate中使用绑定。我想你在调试输出中也有一个绑定错误。 我解决了它使用的是相对源这样的:

<TextBlock Text={Binding DataContext.ButtonText, 
      RelativeSource={RelativeSource FindAncestor, AncestorType=*YourControl*}}"/> 

范本已到DataContext没有直接联系。通过使用相对来源,你可以绑定到它的属性。