首页 > 解决方案 > TextBlock 与两个源绑定

问题描述

我有一个 TextBlock 并显示我使用的翻译文本

x:Uid="/FileResourceName/txtControldName" Name="txtControlName"

(在我写的资源文件中:txtControldName.Text =“some text”)它工作正常。但我想隐藏或显示它取决于代码隐藏对象,为此我使用

Visibility="{Binding Path = IsMyControlVisible}"

(在这种情况下,对于文本,我必须直接在控件中分配一些文本,例如 Text="some text")。如果我使用这两个属性之一,一切正常,但同时这两个属性不起作用。有没有办法做同样的事情?

标签: bindinguwp

解决方案


如果我使用这两个属性之一,一切正常,但同时这两个属性不起作用。有没有办法做同样的事情?

这不是正常的行为。Visibility绑定到属性和在资源文件中设置文本之间没有冲突。您是否为 Binding 设置了 DataContext?

请参阅以下代码示例,它运行良好。

在此处输入图像描述

<Grid>
    <TextBlock x:Uid="txtControldName" Visibility="{Binding IsMyControlVisible}"></TextBlock>
    <Button Content="test" Click="Button_Click"></Button>
</Grid>
public sealed partial class MainPage : Page,INotifyPropertyChanged
{

    private Visibility _IsMyControlVisible;
    public Visibility IsMyControlVisible
    {
        get { return _IsMyControlVisible; }
        set
        {
            _IsMyControlVisible = value;
            RaisePropertyChange("IsMyControlVisible");
        }
    }

    public MainPage()
    {
        this.InitializeComponent();
        this.DataContext = this;
    }

    public event PropertyChangedEventHandler PropertyChanged;

    private void RaisePropertyChange(String PropertyName)
    {
        if (PropertyChanged != null)
        {
            PropertyChanged(this,new PropertyChangedEventArgs(PropertyName));
        }
    }

    private void Button_Click(object sender, RoutedEventArgs e)
    {
        IsMyControlVisible = IsMyControlVisible == Visibility.Collapsed ? Visibility.Visible : Visibility.Collapsed;
    }
}

请注意,您需要实现INotifyPropertyChanged接口,当属性值发生变化时,它会通知 UI。


推荐阅读