我的问题是如果工作解决方案可以更优雅和更有效的方式重做。 我不考虑在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();
}
}
WPF。如果你正在使用事件,你做错了。 – Aron
这是Windows应用商店。 – user2847238
用ICommand替换你的“click事件处理程序”(尝试DelegateCommand),然后在XAML上将按钮绑定到ICommand和当前Item作为命令的参数。 – Aron