2015-06-30 3 views
0

У меня есть 3 кнопки в пользовательском элементе управления, я хотел бы показать и скрыть одну кнопку из приложения WPF или из пользовательского элемента управления. Это не работает для меня. Я внедрил интерфейс INotifyPropertChanged, чтобы уведомить View. Пожалуйста, проверь это.Показать/скрыть элемент управления в пользовательском элементе управления WPF

<UserControl x:Class="WPFUserControl.UserControl1" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
     xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
     mc:Ignorable="d" 
     xmlns:vis="clr-namespace:WPFUserControl" 
     d:DesignHeight="300" d:DesignWidth="300"> 
<UserControl.Resources> 
    <vis:BoolToVisibilityConverter x:Key="BoolToVis" ></vis:BoolToVisibilityConverter> 
</UserControl.Resources> 
<Grid> 
    <Button Content="Button1" HorizontalAlignment="Left" VerticalAlignment="Top" Width="75"/> 
    <Button Content="Button2" HorizontalAlignment="Left" VerticalAlignment="Top" Width="75" Margin="106,0,0,0"/> 
    <Button Content="ShowHide" Visibility="{Binding IsShowHideVisible, Converter={StaticResource BoolToVis}, ConverterParameter=False}" HorizontalAlignment="Left" VerticalAlignment="Top" Width="75" Margin="215,0,0,0"/> 

</Grid> 

public partial class UserControl1 : UserControl, INotifyPropertyChanged 
{ 
    private bool isShowHideVisible; 
    public bool IsShowHideVisible 
    { 
     get { return isShowHideVisible; } 
     set 
     { 
      if(isShowHideVisible!=value) 
      { 
       isShowHideVisible = value; 
      } 
     } 
    } 
    public UserControl1() 
    { 
     InitializeComponent(); 
     // IsShowHideVisible = false; 
    } 

    private void OnPropertyChange(string pPropertyName) 
    { 
     if(PropertyChanged!=null) 
     { 
      PropertyChanged(this, new PropertyChangedEventArgs(pPropertyName)); 
     } 

    } 

    public event PropertyChangedEventHandler PropertyChanged; 
} 
+0

Включите конвертер и проверьте окно «Выход» для каких-либо исключений связывания. –

+0

Можете ли вы показать 'BoolToVis'? Вы пытались выяснить, используете ли вы свой конвертер? –

+0

вы должны поднять свойство on, как это показано на OnPropertyChanged («IsShowHideVisible») – batmaci

ответ

1

В инкубаторе вашего IsShowHideVisible-недвижимости, вы должны позвонить OnPropertyChanged("IsShowHideVisible") сразу после isShowHideVisible = value;.

Ваша собственность, то выглядит следующим образом:

public bool IsShowHideVisible 
{ 
    get { return isShowHideVisible; } 
    set 
    { 
     if(isShowHideVisible!=value) 
     { 
      isShowHideVisible = value; 
      OnPropertyChanged("IsShowHideVisible"); 
     } 
    } 
} 

Если вы используете .net 4.5 или выше, вы можете переписать ваш OnPropertyChanged -метода нравится:

private void OnPropertyChange([CallerMemberName]string pPropertyName = null) 
{ 
    if(PropertyChanged!=null) 
    { 
     PropertyChanged(this, new PropertyChangedEventArgs(pPropertyName)); 
    } 
} 

чем в вашей собственности вы только для вызова OnPropertyChanged(); вместо OnPropertyChanged("IsShowHideVisible");

+0

Я добавил этот код, но все равно не работаю. можете ли вы заглянуть в него. –

+0

В вашей привязке добавьте 'UpdateSourceTrigger = PropertyChanged'. Если это не работает, пожалуйста, покажите нам конвертер, который вы используете для преобразования bool в видимость. – Tomtom

+0

Привет, проблема была внутри конструктора UserControl, для этого потребовался DataContext = this. –

0

После добавления этого.DataContext = это внутри конструктора и OnPropertyChange ("IsShowHide Видимый ") внутри заданного поля, его работа.

public partial class UserControl1 : UserControl, INotifyPropertyChanged 
{ 
    private bool isShowHideVisible; 
    public bool IsShowHideVisible 
    { 
     get { return isShowHideVisible; } 
     set 
     { 
      if(isShowHideVisible!=value) 
      { 
       isShowHideVisible = value; 
       OnPropertyChange("IsShowHideVisible"); 
      } 
     } 
    } 
    public UserControl1() 
    { 
     InitializeComponent(); 
     this.DataContext=this; 
    } 

    private void OnPropertyChange(string pPropertyName) 
    { 
     if(PropertyChanged!=null) 
     { 
      PropertyChanged(this, new PropertyChangedEventArgs(pPropertyName)); 
     } 
    } 
    public event PropertyChangedEventHandler PropertyChanged; 
} 
Смежные вопросы

 Смежные вопросы