在按钮命令上显示列表视图

时间:2014-01-02 17:10:34

标签: c# wpf xaml mvvm

我有以下xaml和视图模型的代码,目前我将屏幕列表视图绑定到视图模型。 用户控件有文本框和按钮,当用户点击按钮(Go)时我想从视图中获取数据,我应该怎么做?

目前我总是在我运行窗口时获取数据

  

当我打开页面并点击时,我希望列表为空   GO按钮列表将被填充

<Grid  Width="877" Height="632" 
DataContext="{Binding Source={StaticResource ConfigServiceModelViewDataSource}}" >
<Grid.ColumnDefinitions>
<UserControl.Resources>
    <ViewModel:ConfigServiceModelView x:Key="ConfigServiceModelViewDataSource" />
    <DataTemplate x:Key="CollectionTemplate">
    </DataTemplate>
</UserControl.Resources>
<ListView Grid.Column="2" HorizontalAlignment="Center" Height="230" 
 Margin="5,20,0,0" Grid.Row="2" VerticalAlignment="Top" Width="330" 
 ItemsSource="{Binding GetCollection}" }" >
<Button Content="Go" Grid.Column="3" Grid.Row="1" HorizontalAlignment="Left"
  VerticalAlignment="Top" Width="75" Height="21.96" />
ModelView 中的

我从模型中获取数据

internal class ConfigModelView {
   private  ConfigServiceModel _configServiceModel = new ConfigServiceModel();

   public List<string> GetServiceCollection {
      get { 
         return _configServiceModel.CollectList; 
      }
   }
}

1 个答案:

答案 0 :(得分:1)

试试这个

  

视图模型

public class ConfigModelView
{
    public ConfigModelView()
    {
        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();

    }
}
  

自定义命令。您可以使用RelayCommand

public class MyCommand : ICommand
{
    private Action _action;
    private Func<bool> _canExecute;
    public MyCommand(Action action, Func<bool> canExecute)
    {
        _action = action;
        _canExecute = canExecute;
    }

    public bool CanExecute(object parameter)
    {
        return _canExecute();
    }

    public event EventHandler CanExecuteChanged;

    public void Execute(object parameter)
    {
        _action();
    }

    public void RaiseCanExecuteChanged()
    { 
        if(CanExecuteChanged!=null)
            CanExecuteChanged(this,new EventArgs());
    }
}
  

XAML

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

我希望这会有所帮助。