2013-12-11 2 views
0

첫 번째 Windows 8 앱을 개발 중입니다. 한 페이지에서 페이지가로드 될 때 최신 텍스트로 버튼 텍스트를 업데이트하려고합니다. 내 XAML을 정의하고 아래와 같이 코드 숨김 : I 버튼 텍스트를 업데이트 할 데이터 바인딩을 사용하고버튼 텍스트 템플릿 데이터 바인딩이 작동하지 않습니다.

하지만 예상대로 작동하지 않습니다 :

에서 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*}}"/> 

템플릿은 데이터 컨텍스트에 직접 액세스 할 수 없습니다 : 나는 그런 상대 소스를 사용하여 해결했다. 상대 소스를 사용하면 속성에 바인딩 할 수 있습니다.

관련 문제