2014-09-28 1 views
0

뒤에있는 코드 (App.xaml.cs)에서 App.xaml로 변수를 바인딩하는 가장 좋은 방법은 무엇일까? 그럼 필자는 필요할 경우 응용 프로그램의 어느 곳에서나이 리소스를 참조 할 수 있습니다. .WPF 응용 프로그램 리소스에 날짜 시간 바인딩

이 클래스를 찾아보십시오. 응용 프로그램 자원을 [icode] NotifyingDateTime [/ icode]에 바인드 할 수 있어야하며 해당 클래스가 변경되면 업데이트됩니다.

public class NotifyingDateTime : INotifyPropertyChanged 
{ 
    public event PropertyChangedEventHandler PropertyChanged; 

    private DateTime _now; 

    public NotifyingDateTime() 
    { 
     _now = DateTime.Now; 
     DispatcherTimer timer = new DispatcherTimer(); 
     timer.Interval = TimeSpan.FromMilliseconds(100); 
     timer.Tick += new EventHandler(timer_Tick); 
     timer.Start(); 
    } 

    public DateTime Now 
    { 
     get { return _now; } 
     private set 
     { 
      _now = value; 
      if (PropertyChanged != null) 
       PropertyChanged(this, new PropertyChangedEventArgs("Now")); 
     } 
    } 
    void timer_Tick(object sender, EventArgs e) 
    { 
     Now = DateTime.Now; 
    } 
} 

그래도 난 바인딩하는 방법을 알아낼 수 없으며하여 DispatcherTimer는 응용 프로그램이 시작될 때를 시작할 수 있도록 클래스를 실행합니다 바인딩 경우도 이해가 안 돼요.

희망적입니다.

+0

이것은 코드 숨김이 아니며 ViewModel입니다. 뷰 모델의 인스턴스를 만들고 뷰 (wpf 페이지) DataContext에 적용합니다. –

+0

무슨 뜻입니까 : "app.xaml에 바인딩"? App.xaml은 UI 요소 정의가 아닌 응용 프로그램 propertys의 방어 파일입니다 – JPVenson

답변

1
같은 것을 볼 필요가 있습니다

Application.Resources에서 NotifyingDateTime의 인스턴스를 선언하고 Text with Now 속성을 바인딩하십시오. .이 같은 원하는 목적지 당신이 NotifyingDateTime 클래스에 정의되는 경우 네임 스페이스 가리 키도록 응용 프로그램의 루트에 지역 이름 공간을 정의 할 필요가 당연히

<Application.Resources> 
    <local:NotifyingDateTime x:Key="NotifyingDateTime"/> 
    <TextBlock x:Key="latestTime" 
       Text="{Binding Source={StaticResource NotifyingDateTime}, Path=Now}"/> 
</Application.Resources> 

이제


, 당신은 자원으로 사용할 수 있습니다 :

<ContentControl Content="{StaticResource latestTime}"/> 
+0

굉장한 감사합니다! –

1

어둠 속에서 ... 당신이 묻는 바는 분명하지 않지만 표시하는 코드 (보기 모델처럼 보임)를 기반으로 Windows의 데이터 인터페이스에 인스턴스를 적용 할 수 있습니다. 그런 다음 창의 모든 바인딩이이 viewmodel 및 해당 속성에 연결됩니다.

<Window x:Class="WpfApplication1.MainWindow" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     xmlns:local="clr-namespace:WpfApplication1" 
     Title="MainWindow" Height="350" Width="525"> 
    <Window.DataContext> 
     <local:NotifyingDateTime></local:NotifyingDateTime> 
     <TextBlock Text="{Binding Now}"></TextBlock> 
    </Window.DataContext> 
</Window> 

하는 상황이 먼저 뷰 모델을 만들려면 고급 얻을 xmlns:local="clr-namespace:WpfApplication1"

에 대한 네임 스페이스를 업데이트해야합니다, 다음과 같은보기 Caliburn.Micro

+0

다른 답변을 먼저 시도해 보았습니다. –