2016-09-05 28 views
0

こんにちは、このチュートリアルhttp://blogs.u2u.be/diederik/post/2011/11/14/null.aspxに従うと、要素の可視性をブール値のプロパティにバインドします。プログラムが動作していません。コードは次のとおりです。問題のバインディングXAML uwp

<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(); 
    } 
} 

プロパティの可視性は変更されません。インテリセンス(Error Xaml namespace)が原因でエラーが発生しましたが解決しました。このコードで何が間違っているのか分かりません。

ありがとうございます。

答えて

1

変更

this.OnPropertyChanged(); 

this.OnPropertyChanged("Show_element"); 

編集するには、次のこと以外にも 、あなたは、あなたがする必要があるので(申し訳ありませんが、私はあなたのコードをチェックしていたときに逃した)のViewModelを持っていません1を作成し、DataContextのように設定します。

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はそのように何とかなります。

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(); 
    }   
} 
+0

それは動作しませんでした。 – rur2641

+0

答えを編集しました、ごめんなさいViewModelなしで完全に間違っていることに気付かないでください) – RTDev

+0

Thx alot!できます。 – rur2641

関連する問題