将 TextBlock 字段绑定到后端变量

Binding TextBlock field to backend variable

第一次真正使用 WPF - 我想我可以重新制作我在 Java 中做过的东西。 我正在尝试将弹出窗口上的 TextBlock 的文本值绑定到后端设置的内容,因此我可以使用一种处理程序方法在所述弹出窗口上显示任何消息。 我一直在尝试多种不同的路线,例如在 cs 中完全绑定它而不是 XAML 像这样:

<--XAML-->
<Popup Margin="89,75,0,0" Name="verif_popup" HorizontalAlignment="Left" VerticalAlignment="Top" IsOpen="False" PopupAnimation="Slide" Placement="Center" Width="100" Height="100" Grid.Column="1">
                            <Popup.Effect>
                                <BlurEffect/>
                            </Popup.Effect>
                            <Canvas Background="Azure">
                                <TextBlock Name="VerifTextBlock"/>
                            </Canvas>
                        </Popup>

<--CS-->
private void SmallPopupHandler(string text)
        {
            Binding binding = new("Text")
            {
                Source = text
            };
            VerifTextBlock.SetBinding(TextBlock.TextProperty, binding);
            verif_popup.IsOpen = true;
        }

但它不喜欢字符串不是 TextBlock 属性 的事实,我有点知道这行不通,但对我来说这似乎是最合乎逻辑的,因为它来自 swing。我似乎也没有办法将它投射到它,我也没有心情让我自己依赖 属性 rn... 我尝试的下一件事是将值绑定到 class 中的一个字段,但我只是遇到了一个 Whosebug 错误(哈哈很好)

<--XAML-->
<Popup Margin="89,75,0,0" Name="verif_popup" HorizontalAlignment="Left" VerticalAlignment="Top" IsOpen="False" PopupAnimation="Slide" Placement="Center" Width="100" Height="100" Grid.Column="1">
                            <Popup.Effect>
                                <BlurEffect/>
                            </Popup.Effect>
                            <Canvas Background="Azure">
                                <Canvas.DataContext>
                                    <local:MainWindow/>
                                </Canvas.DataContext>
                                <TextBlock Name="VerifTextBlock" Text="{Binding Popup_message}"/>
                            </Canvas>
                        </Popup>

<--CS-->
public partial class MainWindow : Window
    {

        public string? Popup_message { get; set; }

        public MainWindow()
        {
            InitializeComponent();
            this.DataContext = this;
        }

我还尝试进行各种接口 class 以查看是否可以解决 Whosebug 错误(哈哈),但我相信您现在可能已经猜到了,那也没有用.. .

有点扯我的头发所以任何帮助将不胜感激! 提前致谢!

您可以按照@Clemens 的建议直接设置 VerifTextBlockText 属性:

private void SmallPopupHandler(string text)
{
    VerifTextBlock.Text = text;
    verif_popup.IsOpen = true;
}

如果您出于某种原因确实想要使用绑定,请删除绑定路径。这应该有效:

private void SmallPopupHandler(string text)
{
    Binding binding = new()
    {
        Source = text
    };
    VerifTextBlock.SetBinding(TextBlock.TextProperty, binding);
    verif_popup.IsOpen = true;
}