TextBlock 中的绑定在 WPF 中不起作用 [英] Binding in TextBlock doesn't work in 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屋!