2014-03-12 20 views
0

我的问题是如果工作解决方案可以更优雅和更有效的方式重做。 我不考虑在MVVM模式中重新构建整个事物,我宁愿考虑更好的方法来将信息从单击处理程序传递给它,而不是对其内容进行分条按钮。如何更好地获取按钮点击处理程序中的类数据

其目的是要有2个独立的empolyee名单 - 左列表是员工的完整列表,右列表是employess分配给特定任务的列表。

MainPage.xaml中

<Grid> 
     <Grid.ColumnDefinitions> 
      <ColumnDefinition Width="1*"/> 
      <ColumnDefinition Width="1*"/> 
     </Grid.ColumnDefinitions> 
     <GridView Grid.Column="0" x:Name="LeftGridView" ItemsSource="{Binding}"> 
      <GridView.ItemTemplate> 
       <DataTemplate> 
        <Button Width="200" Height="200" Click="LeftListButtonClick" Background="Aqua"> 
         <Button.Content> 
          <StackPanel Orientation="Vertical"> 
           <Image Source="{Binding Photo}" Width="60" Height="60"/> 
           <TextBlock Width="100" Height="20" Text="{Binding FirstName}"/> 
           <TextBlock Width="100" Height="20" Text="{Binding Lastname}"/> 
          </StackPanel> 
         </Button.Content> 
        </Button> 
       </DataTemplate> 
      </GridView.ItemTemplate> 
     </GridView> 

     <GridView Grid.Column="1" x:Name="RightGridView" ItemsSource="{Binding}"> 
      <GridView.ItemTemplate> 
       <DataTemplate> 
        <Button Width="200" Height="200" Click="RightListButtonClick" Background="Aqua"> 
         <Button.Content> 
          <StackPanel Orientation="Vertical"> 
           <Image Source="{Binding Photo}" Width="60" Height="60"/> 
           <TextBlock Width="100" Height="20" Text="{Binding FirstName}"/> 
           <TextBlock Width="100" Height="20" Text="{Binding Lastname}"/> 
          </StackPanel> 
         </Button.Content> 
        </Button> 
       </DataTemplate> 
      </GridView.ItemTemplate> 
     </GridView> 
    </Grid> 

class Person 
{ 
    public String FirstName { get; set; } 
    public String Lastname { get; set; } 
    public Image Photo { get; set; } 
} 

class PersonList : ObservableCollection<Person> 
{ 
    private ObservableCollection<Person> _leftList = new ObservableCollection<Person>(); 
    public ObservableCollection<Person> LeftList 
    { 
     get { return _leftList; } 
     set { _leftList = value; } 
    } 

    private ObservableCollection<Person> _rightList = new ObservableCollection<Person>(); 
    public ObservableCollection<Person> RightList 
    { 
     get { return _rightList; } 
     set { _rightList = value; } 
    }  
} 

最后MainPage.xaml.cs中

public sealed partial class MainPage : Page 
{ 
    PersonList newList = new PersonList(); 

    public MainPage() 
    { 
     this.InitializeComponent(); 

     Person p1 = new Person(); 
     p1.FirstName = "John"; 
     p1.Lastname = "Doe"; 
     newList.LeftList.Add(p1); 

     Person p2 = new Person(); 
     p2.FirstName = "Jane"; 
     p2.Lastname = "Doe"; 
     newList.LeftList.Add(p2); 

     LeftGridView.ItemsSource = newList.LeftList; 
    } 

    private void LeftListButtonClick(object sender, RoutedEventArgs e) 
    { 
     Button var = sender as Button; 
     StackPanel var2 = var.Content as StackPanel; 

     var var3 = var2.Children.ToArray(); 
     Person p1 = new Person(); 
     TextBlock tb1 = var3[1] as TextBlock; 
     p1.FirstName = tb1.Text; 

     TextBlock tb2 = var3[2] as TextBlock; 
     p1.Lastname = tb2.Text; 
     newList.RightList.Add(p1); 
     RightGridView.ItemsSource = newList.RightList; 
    } 

    private void RightListButtonClick(object sender, RoutedEventArgs e) 
    { 
     throw new NotImplementedException(); 
    } 
} 
+0

WPF。如果你正在使用事件,你做错了。 – Aron

+0

这是Windows应用商店。 – user2847238

+0

用ICommand替换你的“click事件处理程序”(尝试DelegateCommand),然后在XAML上将按钮绑定到ICommand和当前Item作为命令的参数。 – Aron

回答

0
ICommand _addToRightCommand = new DelegateCommand<Person>(person => this.RightList.Add(person)) 

这不会编译因为各种原因,但它应该给你一个想法做什么。

+0

事实上,它不起作用,因为DelegateCommand不存在。 – user2847238

+0

不在基础框架中。但是几乎所有的MVVM框架都实现了DelegateCommand的一种形式,例如看一下PRISM。 – Aron

相关问题