TextBlock与两个源绑定

时间:2018-08-23 08:49:40

标签: binding uwp

我有一个TextBlock,为了显示我使用的翻译文本

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

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

Visibility="{Binding Path = IsMyControlVisible}"

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

1 个答案:

答案 0 :(得分:1)

  

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

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

请参见下面的代码示例,它运行良好。

enter image description here

<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。