TextBlock 中的绑定在 WPF 中不起作用 [英] Binding in TextBlock doesn't work in WPF

查看:51
本文介绍了TextBlock 中的绑定在 WPF 中不起作用的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想动态更改班级中的 TextBlock 文本.

I want to dynamically change TextBlock text in my Class.

XAML 代码:

<TextBlock Name="Footer_text"  Text=""/>

C#:

string footerMainMenuText = "Setting";
Binding  set = new Binding("");
set.Mode = BindingMode.OneWay;
set.Source = footerMainMenuText;
Footer_text.DataContext = footerMainMenuText;
Footer_text.SetBinding(TextBlock.TextProperty, set);

我检查了最后一行,Footer_text.Text 设置正确.( Footer_text.Text="Setting"),但我的应用程序中的 TextBlock 不显示设置".这里有什么问题?

I checked last line, and the Footer_text.Text is set correctly. ( Footer_text.Text="Setting"), but TextBlock in my application doesnt show "Setting". What is the problem here?

推荐答案

如果您正在绑定 - 为什么不直接在 XAML 中进行呢?看看你的代码,这有点毫无意义——你不妨去

If you are binding - why not just do it in XAML instead? Looking at your code it's kind of pointless - you might as well just go

Footer_text.Text = "Setting";

理想情况下,您应该在 XAML 中执行此操作,或者至少提供一些可以绑定到的内容

You should ideally do it in XAML or at least provide something for it to bind to

<TextBlock Text="{Binding SomeProperty}" />

我不知道为什么你要把一个字符串"绑定到任何东西上……你有一个需要绑定到 text 属性的对象吗?

I'm not sure why you would bind a 'string' on it's own to anything...do you have an object which you need to bind to the text property?

也使用

Binding("")

那有什么作用?空白路径?不确定那里的绑定目标是什么......你有没有尝试过

What does that do? A blank path? Not sure what the binding target would be there... have you tried

Binding()

相反?

您的绑定未更新控件的原因也可能是因为您尚未绑定到实现 INotifyPropertyChanged 或类似接口的对象.控件需要知道值何时发生更改,因此我认为绑定到字符串"不会在 TextBlock 更改时提供正确的通知

Also the reason why your binding is not updating the control, is probably because you haven't bound to an object which implements INotifyPropertyChanged or a similar interface. The controls need to know when values have changed, so I'd imagine that binding to 'string' isn't giving the TextBlock the proper notification when it changes

编辑 2:

这是绑定工作的一个快速示例:

Here is a quick example of binding working:

我的窗口类Window.cs:

My window class Window.cs:

<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>
        <StackPanel>
        <TextBlock x:Name="txtName" Text="{Binding Name}"></TextBlock>
            <Button Click="Button_Click">Click me 1</Button>
            <Button Click="Button_Click_1">Click me 2</Button>
        </StackPanel>
    </Grid>
</Window>

Window.xaml.cs 中的代码

The code behind in Window.xaml.cs

public partial class MainWindow : Window
{
    SomeObjectClass obj = new SomeObjectClass();
    public MainWindow()
    {
        InitializeComponent();

        txtName.DataContext = obj;
    }

    private void Button_Click(object sender, RoutedEventArgs e)
    {
        obj.Name = "Hello World";
    }

    private void Button_Click_1(object sender, RoutedEventArgs e)
    {
        obj.Name = "Goobye World";
    }
}

要绑定的对象(使用 INotifyPropertyChanged)

The object to bind to (with INotifyPropertyChanged)

class SomeObjectClass : INotifyPropertyChanged
{
    private string _name = "hello";
    public string Name
    {
        get
        {
            return _name;
        }
        set
        {
            _name = value;
            OnPropertyChanged("Name");
        }
    }

    public event PropertyChangedEventHandler PropertyChanged;

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

单击按钮会更改 SomeObject.Name,但会更新文本框.

Clicking the buttons changes SomeObject.Name, but it updates the textbox.

这篇关于TextBlock 中的绑定在 WPF 中不起作用的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆