Вопрос по wpf, textblock, c#, data-binding – Привязка в TextBlock не работает в WPF

1

Я хочу динамически менятьTextBlock текст в моем классе.

XAML-Code:

<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 в моем приложении не отображается "Настройка". В чем здесь проблема?

Вы пытались удалитьText="" из XAML? user7116

Ваш Ответ

1   ответ
4

Если вы обязываетесь - почему бы просто не сделать это в XAML? Глядя на ваш код, это бессмысленно - вы можете просто пойти

Footer_text.Text = "Setting";

В идеале вы должны сделать это в XAML или, по крайней мере, предоставить что-то для

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

Я не уверен, почему вы привязали бы «строку» это относится ко всему ... у вас есть объект, который вам нужно привязать к свойству text?

Также используя

Binding("")

Что это делает? Пустой путь? Не уверен, что цель привязки будет там ... вы пробовали

Binding()

вместо?

Редактировать:

Также причина, по которой ваша привязка не обновляет элемент управления, возможно, заключается в том, что вы не привязаны к объекту, который реализует INotifyPropertyChanged или подобный интерфейс. Органы управления должны знать, когда значения изменились, поэтому я предполагаю, что привязка к «строке» не дает TextBlock надлежащее уведомление при его изменении

Изменить 2:

Вот быстрый пример работы привязки:

Мой класс окна 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

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)

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, но обновляет текстовое поле.

Похоже, вам нужно какое-то обучение - вы новичок в программировании / c #? В основном - если вы хотите изменить значение из test.cs, вам нужно сделать & apos; obj & apos; переменную public и передайте экземпляр MainWindow в test.cs, чтобы вы могли ссылаться на переменную obj. Я думаю, что делать это, возможно, выходит за рамки того, для чего предназначен StackOverflow: P
спасибо, ваш код работает отлично. но для моего приложения правильно работает. У меня есть три класса: (Window) MainWindow, (class) SomeObjetcClass и (Window) test. SomeObjectclass похож на ваш класс. Переместите эти две кнопки из MainWindow для проверки. MainWindows включает только TextBlock. тогда это работает. если я нажимаю кнопку, нажмите меня 1 из тест-класса, текст привет не меняется. Что я должен изменить в своем коде, чтобы контролировать текстовый блок из другого класса (test.cs), нажав кнопку в этом классе? Lucas

Похожие вопросы