2014-03-12 22 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

相關問題