C# 与单个窗口类绑定

C# 与单个窗口类绑定,c#,wpf,C#,Wpf,这是一个奇怪的问题。我知道您不应该以这种方式构造任何真正的WPF应用程序 在MainWindow类中工作并仅使用MainWindow类如何将XAML元素绑定到CLR属性 这是我的XAML <Window x:Class="WpfApplication1.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.mi

这是一个奇怪的问题。我知道您不应该以这种方式构造任何真正的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));
        }
    }
}
命名空间WpfApplication1
{
/// 
///MainWindow.xaml的交互逻辑
/// 
公共部分类主窗口:窗口,INotifyPropertyChanged
{
字符串_myString=“hello world”;
公共字符串MyString
{
获取{return\u myString;}
}
公共主窗口()
{
初始化组件();
}
公共事件属性更改事件处理程序属性更改;
void OnPropertyChanged(字符串propName)
{
if(this.PropertyChanged!=null)
这是我的财产改变了(
这是新的PropertyChangedEventArgs(propName));
}
}
}

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

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

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

在这种情况下,您可以简单地执行以下操作:

<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,它成功了。谢谢。从您的回答中,我了解到我还可以在代码中设置DataContext。公共主窗口(){InitializeComponent();this.DataContext=this;}
<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>