0

UWP를 처음 사용하고 여러 페이지에 Windows 핵심 IOT 응용 프로그램에 시계를 표시하려고합니다. 이 작업을 수행하는 가장 좋은 방법은 무엇입니까?C# : Windows 핵심 IOT 응용 프로그램에서 여러 페이지에 시계를 표시하는 방법

클래스를 사용하여 동적으로 업데이트하고 헤더와 바인딩하려고 시도했지만 어떻게 "템플릿"의 헤더를 바인딩합니까? 시계를 넣을 헤더는 앱의 모든 페이지에서 사용하는 ResourceDictionary에 있습니다. 아니면 App.xaml에 시계를 넣어야합니까?이 경우에도 헤더에 바인딩하여 항상 업데이트 할 수 있습니까?

내 수업에 INotifyPropertyChanged을 구현해야합니까, 아니면 다른 방법이 있습니까?

감사합니다.

편집 :이 헤더에 대한 코드가 (5월 17일)

입니다

ResourceDictionnary :

<ResourceDictionary 
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
xmlns:local="using:Project.Resources" 
x:Class="Project.Header"> 
<!-- ... --> 
    <!-- Header --> 
    <DataTemplate x:Key="Header" x:DataType="local:Header"> 
     <TextBlock x:Name="labelHeader" Text="{x:Bind Time, Mode=OneWay}"/> 
    </DataTemplate> 
<!-- ... --> 
</ResourceDictionary> 
+0

[다음과 같은] 타이머를 사용하여 시간을 업데이트 할 수 있습니다 (http://stackoverflow.com/questions/38562704/make-clock-uwp-c). 그리고 헤더에 관해서는 여기에 코드를 표시하는 것이 가장 좋습니다. –

+0

@Rita Han - MSFT 의견을 주셔서 감사합니다. 한 페이지의 시계를 업데이트하는 데 문제가 없습니다. 내가하려고하는 것은 시계의 동일한 코드를 여러 페이지에 바인딩하는 것입니다. 하나의 페이지에만 바인딩하면 작동합니다.어떻게 여러 페이지로 코드 뒤에 "공유"할 수 있습니까? 또는 일반적으로 이와 같은 것을 업데이트해야합니까 (여러 페이지간에 공유되지만 동적으로 변경되는 내용). –

답변

0

당신은 모든 페이지에 시계를 넣을 필요가 없습니다. Frame 컨트롤을 사용하여 다른 페이지를 MainPage의 콘텐츠로 호스팅 할 수 있습니다. MainPgae "헤더"에 시계 넣기. 다른 페이지 간의 탐색은 시계 영역 외부에서 발생합니다. 그런 다음 MainPage에서 시계를 업데이트하고 다른 페이지간에 공유 할 수 있습니다.

다음 참조 할 수있는 간단한 예입니다 :

에서 MainPage.xaml

<StackPanel Background="{ThemeResource ApplicationPageBackgroundThemeBrush}"> 
    <TextBlock Text="{Binding Time}" Margin="20,5,5,5"/> 
    <StackPanel> 
     <Button Name="Page1" Content="Page1" Click="Page1_Click" /> 
     <Button Name="Page2" Content="Page2" Click="Page2_Click" /> 
     <Button Name="Page3" Content="Page3" Click="Page3_Click" /> 
    </StackPanel> 
    <StackPanel VerticalAlignment="Center"> 
     <Frame Name="MyFrame"></Frame> 
    </StackPanel> 
</StackPanel> 

MainPage.xaml.cs를

Clock clock = new Clock(); 
    public MainPage() 
    { 
     this.InitializeComponent(); 
     this.DataContext = clock; 
     clock.InitClock(); 
    } 

    private void Page1_Click(object sender, RoutedEventArgs e) 
    { 
     MyFrame.Navigate(typeof(Page1)); 
    } 

    private void Page2_Click(object sender, RoutedEventArgs e) 
    { 
     MyFrame.Navigate(typeof(Page2)); 
    } 

    private void Page3_Click(object sender, RoutedEventArgs e) 
    { 
     MyFrame.Navigate(typeof(Page3)); 
    } 

Clock.cs

public class Clock : INotifyPropertyChanged 
{ 
    DispatcherTimer Timer = new DispatcherTimer(); 
    public string _time { get; set; } 
    public string Time 
    { 
     get { return _time; } 
     set 
     { 
      _time = value; 
      OnPropertyChanged("Time"); 
     } 
    } 

    public event PropertyChangedEventHandler PropertyChanged; 

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

    } 

    public void InitClock() 
    { 
     Timer.Tick += Timer_Tick; 
     Timer.Interval = new TimeSpan(0, 0, 1); 
     Timer.Start(); 
    } 

    private void Timer_Tick(object sender, object e) 
    { 
     Time = DateTime.Now.ToString("h:mm:ss tt"); 
    } 
} 
+0

예를 들어 주셔서 감사합니다! –

0

나는 사지에 나가서 하겠어 여기서는 응용 프로그램의 모든 페이지에 동일한 요소를 추가하는 대신 두 개의 프레임을 사용해야한다고 제안합니다.

전초 프레임은 모든 페이지에있는 요소에 사용됩니다. 그게 머리글, 메뉴, 시간 업데이트 일 수 있습니다. 이름을 붙이십시오. 그 내용을 더 쉽게 다루게합니다.

두 번째 프레임을 배치하고이를 페이지 간 탐색에 사용합니다. 우리의 응용 프로그램을 살펴보십시오.이 응용 프로그램에는 '페이지 1'이라는 수직 "헤더"가 있고, 오른쪽에는 탐색에 사용되는 "페이지 2"가 있습니다.

Two frames

+0

고맙습니다.이 방법으로 많은 작업을 단순화 할 수 있다는 것을 이해합니다. 앱에서 구현해야하는 모든 작업을 완료 한 후에 시도 할 것입니다. 한편 누군가가 이미 내가 가진 것에 더 가까운 답변을 주면 내가 먼저 그 방법을 시도해 볼게. –

+0

감사합니다. 시도해 봤지만 쉽습니다. 예제로 인해 @ Rita Han - MSFT의 답을 해결책으로 표시 할 것입니다. 고마워요 –