C#WPF - 从MainWindow到MainWindow中的TextBlock的绑定属性

时间:2017-03-26 17:05:24

标签: c# .net wpf xaml binding

我似乎很难找到我的问题的答案(我已经阅读了很多,但没有一个为我工作)。我试图在主窗口的TextBlock中显示存储在MainWindow.xaml.cs中的一些DateTime。我正在玩它,所以我设置了一个测试代码:

MainWindow.xaml.cs:

public partial class MainWindow : Window
{
    public DateTime displayTime;

    public MainWindow()
    {
        displayTime = new DateTime(1,1,1,0,1,21,306);
        InitializeComponent();
    }
}

MainWindow.xaml:

<Window x:Class="Project1.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    xmlns:local="clr-namespace:Project1"
    mc:Ignorable="d"
    Title="Main Window" MinHeight="450" Height="450" MinWidth="650" Width="650">

<TextBlock Text="{Binding Path=displayTime, StringFormat='{}{0:h \: m \: ss\.fff}', Mode=OneWay}" />

1 个答案:

答案 0 :(得分:2)

有几件事需要解决。

第一件事是displayTime而非属性,它是字段。添加getter / setter以使其可以进行绑定。

public DateTime displayTime { get; set; }

第二件事是Binding Path=displayTime绑定期望displayTime是DataContext的属性。

尝试将Window DataContext设置为self:

InitializeComponent();
DataContext = this;

或在绑定中使用相对来源:

<TextBlock Text="{Binding Path=displayTime, 
                  StringFormat='{}{0:h \: m \: ss\.fff}', 
                  Mode=OneWay, 
                  RelativeSource={RelativeSource AncestorType=Window}}"/>

在小视图中绑定来自代码隐藏的属性是可以的。在更大的视图中,标记和代码可能变得非常复杂,建议为该视图创建单独的视图模型(阅读有关MVVM的信息)。