繁体   English   中英

在GridViewColumn按钮的click事件处理程序中获取绑定项

[英]Get bound item inside click event handler of the GridViewColumn button

我正在尝试制作一个显示星期几和开始/结束工作日作为练习的应用程序。

因此,我使用以下元素和绑定制作了XAML:

<StackPanel Grid.Row="1" Margin="0,0,0,0" >
            <ListView ItemsSource="{Binding TimeListView}">
                <ListView.View>
                    <GridView>
                        <GridViewColumn Width="200" Header="Day" 
                    DisplayMemberBinding="{Binding Date}"  />
                        <GridViewColumn Width="200" Header="Time"  
                    DisplayMemberBinding="{Binding Time}" />
                        <GridViewColumn Width="50">
                            <GridViewColumn.CellTemplate>
                                <DataTemplate>
                                    <Button x:Name="EditEntry" Content="Edit" Click="EditClick" />
                                </DataTemplate>
                            </GridViewColumn.CellTemplate>
                        </GridViewColumn>
                    </GridView>
                </ListView.View>
            </ListView>
        </StackPanel>

在我的EditClick中,我有以下代码:

private void EditClick(object sender, RoutedEventArgs e)
{
    MessageBox.Show("Sender: " + sender.ToString());
}

所以我的问题是:如何在EditClick函数的同一行中保存日期和时间的数据?

最简单的方法是使用发送方按钮的DataContext属性 它将包含绑定到当前(“父”)行的项目:

public MainWindow()
{
    InitializeComponent();

    this.TimeListView = new ObservableCollection<Item>(new Item[]
        {
            new Item(),
            new Item()
        });

    this.DataContext = this;
}

public ObservableCollection<Item> TimeListView
{
    get;
    private set;
}

private void EditClick(object sender, RoutedEventArgs e)
{
    var button = (Button)sender;

    var item = (Item)button.DataContext;

    MessageBox.Show("Item is: " + item.ToString());
}

物品类别:

public class Item
{
    public Item()
    {
        this.Day = DateTime.Now.DayOfWeek;
        this.Time = DateTime.Now.TimeOfDay;
    }

    public DayOfWeek Day { get; set; }

    public TimeSpan Time { get; set; }

    public override string ToString()
    {
        return String.Format("{0}, {1}", this.Day, this.Time);
    }
}

好的,如果我对这个问题的解释正确,那么当调用EditClick函数时,您要获取当前选择的日期和时间吗?

如果是这样,请执行以下操作:

string theCurrentSelectedDateTime = YouListView.ColumnOne.SelectedItem.ToString() + YourListView.ColumnTwo.SelectedItem.ToString();

那应该给您您想要的。 但是,如果您要问其他问题,请发表评论,因为还不允许我发表评论:(。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM