WPF将DateTime绑定到应用程序资源

时间:2014-09-28 20:35:14

标签: c# wpf xaml

什么是将变量从后面的代码(App.xaml.cs)绑定到App.xaml的最佳方法,因此如果需要,我可以在我的应用程序中的任何地方引用此资源。

找到这个有意义的课程。我应该能够将应用程序资源绑定到[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;
    }
}

我无法弄清楚如何绑定它,也不知道绑定是否会执行Class,以便DispatcherTimer将在应用程序启动时启动。

希望这是有道理的。

2 个答案:

答案 0 :(得分:1)

在黑暗中刺伤......不清楚你在问什么,但根据你展示的代码(看起来像一个视图模型),你可以将它的一个实例应用到windows datacontext。然后窗口中的任何绑定都将链接到此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

之类的视图

答案 1 :(得分:1)

只需在Application.Resources下声明NotifyingDateTime实例,并使用Now属性绑定Text。

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

当然,你必须在App的根目录定义本地命名空间,以指向定义了NotifyingDateTime类的命名空间。


现在,您可以将它用作任何您想要的资源:

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