Binding in TextBlock doesn't work in WPF

匿名 (未验证) 提交于 2019-12-03 00:50:01

问题:

I want to dynamically change TextBlock text in my Class.

XAML-Code:

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);

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?

回答1:

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";

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

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?

Also using

Binding("")

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

Binding()

instead?

Edit:

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

Edit 2:

Here is a quick example of binding working:

My window class Window.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";     } }

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));     } }

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



标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!