簡體   English   中英

TextBlock中的綁定在WPF中不起作用

[英]Binding in TextBlock doesn't work in WPF

我想在我的類中動態更改TextBlock文本。

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沒有顯示“Setting”。 這里有什么問題?

如果你有約束力 - 為什么不在XAML中呢? 看看你的代碼,這有點毫無意義 - 你也可以去吧

Footer_text.Text = "Setting";

理想情況下,您應該在XAML中執行此操作,或者至少為其提供綁定的內容

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

我不確定為什么你會把它自己的'string'綁定到任何東西......你有一個你需要綁定到text屬性的對象嗎?

也用

Binding("")

那是做什么的? 一條空白路徑? 不確定綁定目標會在那里......你試過嗎?

Binding()

代替?

編輯:

此外,綁定不更新控件的原因可能是因為您沒有綁定到實現INotifyPropertyChanged或類似接口的對象。 控件需要知道值何時發生了變化,所以我認為綁定到'string'並不會在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,但它會更新文本框。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM