【问题标题】:Binding with a single Window Class与单个窗口类绑定
【发布时间】:2014-10-11 06:52:02
【问题描述】:

这是出于好奇的问题。我知道您不应该以这种方式构建任何真正的 WPF 应用程序。

在 MainWindow 类中工作并仅使用 MainWindow 类如何将 XAML 元素绑定到 CLR 属性?

这是我的 XAML。

<Window x:Class="WpfApplication1.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="350" Width="525">
    <Grid>
        <TextBlock DockPanel.Dock ="Top" Height="50" Width="50"
                   Background ="AliceBlue" FontSize ="16" />
    </Grid>
</Window>

和代码

namespace WpfApplication1
{
    /// <summary>
    /// Interaction logic for MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window, INotifyPropertyChanged
    {
        string _myString = "hello world";
        public string MyString
        {
            get { return _myString; }
        }

        public MainWindow()
        {
            InitializeComponent();
        }

        public event PropertyChangedEventHandler PropertyChanged;

        void OnPropertyChanged(string propName)
        {
            if (this.PropertyChanged != null)
                this.PropertyChanged(
                    this, new PropertyChangedEventArgs(propName));
        }
    }
}

所以我想在文本块中显示字符串。我认为它是一个简单的绑定,但我找不到正确的语法。谢谢

【问题讨论】:

    标签: c# wpf


    【解决方案1】:

    您必须将窗口数据上下文设置为自身。

    <Window.DataContext>
        <Binding RelativeSource="{RelativeSource Self}"/>
    </Window.DataContext>
    

    那么你不能绑定到你的属性MyString

    <TextBlock DockPanel.Dock ="Top" Height="50" Width="50"
                    Background ="AliceBlue" FontSize ="16" />
    

    【讨论】:

    • 谢谢。从您的回答中我了解到,我还可以在后面的代码中设置 DataContext。公共 MainWindow() { InitializeComponent(); this.DataContext = this; }
    【解决方案2】:

    在这种情况下,您可以简单地这样做:

    <Window x:Class="WpfApplication1.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="350" Width="525"
        x:Name="MainWindow">
        <Grid>
            <TextBlock DockPanel.Dock ="Top" Height="50" Width="50"
                       Background ="AliceBlue" FontSize ="16"
                       Text="{Binding MyString, ElementName=MainWindow}" />
        </Grid>
    </Window>
    

    【讨论】:

    • 此外,每当您的字符串更改时,您都可以通过调用 OnPropertyChanged("MyString") 来更新绑定
    • 谢谢。我进行了更改并得到一个错误,说不能使名称 MainWindow 与封闭类型相同。所以我改为 x:Name="MainWindow2" 和 ElementName=MainWindow2 并且它工作了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-06-08
    • 2021-11-11
    • 1970-01-01
    • 1970-01-01
    • 2016-05-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多