无法绑定 XAML uwp [英] Trouble binding XAML uwp

查看:34
本文介绍了无法绑定 XAML uwp的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在学习本教程,http://blogs.u2u.be/diederik/post/2011/11/14/null.aspx,将元素的可见性绑定到布尔属性.该程序不起作用.代码如下:

Hi I am following this tutorial,http://blogs.u2u.be/diederik/post/2011/11/14/null.aspx, to bind the visibility of an element to a Boolean property. The program is not working. Here is the code:

<Page.Resources>
    <local:BooleanToVisibilityConverter x:Key="TrueToVisibleConverter"/>
</Page.Resources>

<Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
    <StackPanel>
        <TextBlock  Text=" Hello World" 
                    Visibility="{Binding Path=Show_element, Converter={StaticResource TrueToVisibleConverter}}"/>
        <Button Click="Button_Click">press button</Button>
    </StackPanel>
</Grid>

public sealed partial class MainPage : Page , INotifyPropertyChanged
{
    private bool show_element ;
    public bool Show_element
    {
        get { return show_element; }
        set
        {
            show_element = value;
            this.OnPropertyChanged();
            Debug.WriteLine("Show_element value changed");
        }
    }
    public MainPage()
    {
        this.InitializeComponent();
    }

    private void Button_Click(object sender, RoutedEventArgs e)
    {
        Show_element = !Show_element;
    }
    public event PropertyChangedEventHandler PropertyChanged = delegate { };
    public void OnPropertyChanged(string propertyName = null)
    {
        this.PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
    }
}
public class BooleanToVisibilityConverter : IValueConverter
{       
    public bool IsReversed { get; set; }

    public object Convert(object value, Type typeName, object parameter, string language)
    {
        var val = System.Convert.ToBoolean(value);
        if (this.IsReversed)
        {
            val = !val;
        }

        if (val)
        {
            return Visibility.Visible;
        }

        return Visibility.Collapsed;
    }

    public object ConvertBack(object value, Type targetType, object parameter, string language)
    {
        throw new NotImplementedException();
    }
}

可见性不随属性而改变.由于智能感知(错误 Xaml 命名空间),我遇到了错误已解决.不确定这段代码有什么问题.

The visibility does not change with the property. I was having an error due to intellisense (Error Xaml namespace) which was resolved. Not sure what is wrong with this code.

谢谢.

推荐答案

change

this.OnPropertyChanged();

this.OnPropertyChanged("Show_element");

除此之外,您没有 ViewModel(抱歉,我在检查您的代码时错过了),因此您需要创建一个并将其设置为 DataContext:

edit: besides that, you don't have a ViewModel (sorry, missed that when I was checking your code), so you need to create one and set it as DataContext:

ViewModel.cs:

ViewModel.cs:

public class ViewModel : INotifyPropertyChanged
{
    private bool show_element;
    public bool Show_element
    {
        get { return show_element; }
        set
        {
            show_element = value;
            this.OnPropertyChanged("Show_element");
            Debug.WriteLine("Show_element value changed");
        }
    }
    public ViewModel()
    {
    }

    public void ButtonClicked()
    {
        Show_element = !Show_element;
    }

    public event PropertyChangedEventHandler PropertyChanged = delegate { };
    public void OnPropertyChanged(string propertyName = null)
    {
        this.PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
    }
}

你的 MainPage.xaml.cs 应该看起来像这样:

and your MainPage.xaml.cs should look somehow like that:

public sealed partial class MainPage : Page
{        
    private ViewModel _viewModel;

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

    private void Button_Click(object sender, RoutedEventArgs e)
    {
        _viewModel.ButtonClicked();
    }        
}

这篇关于无法绑定 XAML uwp的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆