2014-01-03 4 views
2

У меня есть текстовое поле и список, и когда вы нажимаете на кнопку , вы просматриваете список, в настоящее время вид списка находится под кнопкой и текстовым полем и всегда есть и заполняется после нажатия на кнопку. Существует способ, чтобы скрыть просмотр списка со страницы, пока вы не нажмете на кнопку и не запросите данные?Скрыть просмотр списка до тех пор, пока не будет нажата кнопка

public class ModelView 
{ 
    public ModelView() 
    { 
     GetServiceCollection = new ObservableCollection<string>(); 
    } 

    bool isDataLoaded = false; 

    MyCommand goCommand; 
    public ICommand GoCommand 
    { 
     get { return goCommand ?? (goCommand = new MyCommand(() => OnGoCommand(),() => !isDataLoaded)); } 
    } 

    public ObservableCollection<string> GetServiceCollection { get; set; } 

    void OnGoCommand() 
    { 
     GetServiceCollection.Clear(); 

     foreach (var item in _configServiceModel.CollectList) 
     { 
      GetServiceCollection.Add(item); 
     } 

     isDataLoaded = true; 
     goCommand.RaiseCanExecuteChanged(); 

    } 

...... 

Часть XAML

<Button Content="Go" Grid.Column="3" Grid.Row="1" HorizontalAlignment="Left" 
VerticalAlignment="Top" Width="75" Height="21.96" Command="{Binding GoCommand}"/> 

<ListView Grid.Column="2" HorizontalAlignment="Center" Height="230" 
Margin="5,20,0,0" Grid.Row="2" VerticalAlignment="Top" Width="330" 
ItemsSource="{Binding GetCollection}" }" > 
} 

ответ

1

ViewModel

public class ConfigModelView:INotifyPropertyChanged 
{ 
    public ConfigModelView() 
    { 
     GetServiceCollection=new ObservableCollection<string>(); 
    } 

    bool isDataLoaded; 
    public bool IsDataLoaded 
    { 
     get { return isDataLoaded; } 
     set { isDataLoaded = value; OnPropertyChanged("IsDataLoaded"); } 
    } 
    MyCommand goCommand; 
    public ICommand GoCommand 
    { 
     get{return goCommand ?? (goCommand=new MyCommand(()=>Command(),()=>!isDataLoaded));} 
    } 
    public ObservableCollection<string> GetServiceCollection{get;set;} 

    void Command() 
    { 
     foreach (var item in _configServiceModel.CollectList) 
     { 
      GetServiceCollection.Add(item); 
     } 

     isDataLoaded = true; 
     OnPropertyChanged("IsDataLoaded"); 
     goCommand.RaiseCanExecuteChanged(); 
    } 


    public event PropertyChangedEventHandler PropertyChanged; 

    protected void OnPropertyChanged(string propertyName) 
    { 
     if (this.PropertyChanged != null) 
      this.PropertyChanged(this, new PropertyChangedEventArgs(propertyName)); 
    } 
} 

BooleanToVisibilityConverter

public class BoolToVisibilityConverter : IValueConverter 
{ 

    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
    { 
     if (value is bool) 
     { 
      if ((bool)value) 
       return Visibility.Visible; 
      else 
       return Visibility.Collapsed; 
     } 
     return null; 
    } 

    public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
    { 
     throw new NotImplementedException(); 
    } 
} 

XAML

<Window x:Class="WpfApplication3.Window1" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    xmlns:local="clr-namespace:WpfApplication3" 
    Title="Window1" Height="300" Width="800"> 
<Window.Resources> 
    <local:BoolToVisibilityConverter x:Key="BoolToVisibilityConverter"/> 
</Window.Resources> 
<StackPanel> 
    <Button Content="Go" Grid.Column="3" Grid.Row="1" HorizontalAlignment="Left" 
VerticalAlignment="Top" Width="75" Height="21.96" Command="{Binding GoCommand}"/> 

    <ListView Grid.Column="2" HorizontalAlignment="Center" Height="230" 
Margin="5,20,0,0" Grid.Row="2" VerticalAlignment="Top" Width="330" 
Visibility="{Binding IsDataLoaded, 
Converter= {StaticResource BoolToVisibilityConverter}}" 
ItemsSource="{Binding GetCollection}" /> 
</StackPanel> 

+0

FYI - 'BooleanToVisibilityConverter' предоставляется в WPF по умолчанию. Просто объявляйте так: ''. –

+0

Спасибо за вашу помощь! Voted Up Я использую ваш код и его работу, но теперь, когда я нажимаю кнопку, я получаю данные, но кнопка включена, что я должен изменить в этом случае? Btw есть способ написать код иначе, чем {return goCommand ?? (goCommand = new MyCommand (() => Command(), true)); , может быть, просто? Спасибо заранее –

+0

@ RohitVats-, когда я перехожу к этому типу, я получил ошибку в RT, мне нужно добавить что-то в дополнение к этому –

1

Лучше всего здесь будет создать еще одно свойство на ViewModel, что вы связать видимость ListView с. В реализации GoCommand установите это свойство как видимое.

Как примечание стороны, ваш ViewModel не реализует INotifyPropertyChanged, так что вам нужно сделать, а также иметь обновление visiblity при изменении свойства:

private Visibility listViewVisibility; 
public Visibility ListViewVisibility 
{ 
    get { return listViewVisibility; } 
    set 
    { 
     if (this.listViewVisibility == value) 
      return; 

     this.listViewVisibility = value; 
     this.OnPropertyChanged("ListViewVisibility"); 
    } 
} 

public event PropertyChangedEventHandler PropertyChanged; 

protected void OnPropertyChanged(string propertyName) 
{ 
    if(this.PropertyChanged != null) 
     this.PropertyChanged(this, new PropertyChangedEventArgs(propertyName)); 
} 

Часть XAML:

<ListView Grid.Column="2" HorizontalAlignment="Center" Height="230" 
      Margin="5,20,0,0" Grid.Row="2" VerticalAlignment="Top" Width="330" 
      Visibility="{Binding ListViewVisibility}" 
      ItemsSource="{Binding GetCollection}" /> 
0

Ну загрузите свою форму, а затем вставьте «listView1.hide()».

Затем создайте событие своей кнопки.

Тип "listView1.show()".

P.S. вы также можете установить все эти значения в свой код C#.

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