WPF使用类参数绑定标签内容

问题描述 投票:1回答:1

我在网上阅读了一堆教程,MSDN上的文档和答案,但我仍然不理解WPF中的绑定。我有这样的C#类

namespace Organizer

{

public class UIDate
{
    private int year;
    private int month;
    private String dateStr;

    public UIDate()
    {
        DateTime actualDateTime = DateTime.Now;
        year = actualDateTime.Year;
        month = actualDateTime.Month;
        dateStr = Convert.ToString(Year);
    }

    public int Year
    {
        get { return year; }
        set { year = value; }
    }

    public int Month
    {
        get { return month; }
        set { month = value; }
    }

    public String DateStr
    {
        get { return dateStr; }
        set { dateStr = value; }
    }
}

}

我想在这里绑定属性DateStr与标签内容

<Window x:Class="Organizer.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"
    mc:Ignorable="d"
    Title="MainWindow" Height="450" Width="800" WindowState="Normal">
<DockPanel>
    <StackPanel DockPanel.Dock="Top" Orientation="Horizontal">
        <Button MinWidth="25" MaxHeight="25" Margin="8"/>
        <Button MinWidth="15" MaxHeight="15" Margin="5"/>
        <Label Name="UIDateYM" Content="{Binding Path=UIDate.DateStr, UpdateSourceTrigger=PropertyChanged}" Margin="0, 8"/>

我相信XAML的其余部分是无关的。

和xaml.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using Organizer;

namespace Organizer
{
    /// <summary>
    /// Logika interakcji dla klasy MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window
    {
        public MainWindow()
        {            
            InitializeComponent();
            UIDate uiDate = new UIDate();
            this.DataContext = uiDate;
        }
    }
}

应用程序运行时,标签中没有文本。内容为空。我检查我的upDate对象,它的工作原理。正如我想的那样,财产和它的领域具有正确的价值。如何绑定它们?我错过了什么?

谢谢。

c# wpf data-binding
1个回答
1
投票
  1. 你必须设置一个数据上下文(ok)= - >(你已经完成了,如果你使用MVVM有更优雅的方法,但那很好) 你已经在xaml中设置了一个绑定,但你绑定到类名UIDate.DateStr

如果您将数据上下文设置为元素。所有子节点都将具有相同的数据上下文 - >只要您没有更改它。 (您将其设置为window / this,因此作为子项的标签也具有相同的数据上下文)

请记住,您的DataContext已经设置好,您可以直接访问其中的属性。

更改:

{Binding Path=UIDate.DateStr, UpdateSourceTrigger=PropertyChanged}

至:

{Binding Path=DateStr}

这里的updatesourcetrigger不是必需的。 BEC。触发器在这里通知有界对象某些东西发生了变化。 (只在这个方向)。

在您的情况下,标签不是输入控件,只需显示值。表示控件不需要通知绑定对象更改的内容。

下一点:如果您不想更改对象中的值。您可以保持代码不变。 BEC。如果设置了一个对象(在您的情况下设置了数据上下文),则引用此对象的所有绑定都将更新。所以初始值已设定。

但是,如果在绑定对象时更改了值,则需要通知Control。你应该寻找接口INotifyPropertyChanged ...

欢迎希望它现在清楚

© www.soinside.com 2019 - 2024. All rights reserved.