c# - 在 GridViewColumn 按钮的单击事件处理程序中获取绑定(bind)项

标签 c# wpf listview button data-binding

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

所以我用这个元素和绑定(bind)创建了 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 property的发送者按钮。它将包含绑定(bind)到 current("parent") 的项目行:

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);
    }
}

关于c# - 在 GridViewColumn 按钮的单击事件处理程序中获取绑定(bind)项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29831094/

相关文章:

c# - 将 customDimensions 拆分为 3 个 json,然后使用 kusto 查询进行项目

c# - 图像控件的 OnLoad 客户端事件

.net - 如何使用数据绑定(bind)在 WPF 中创建无限深度的 TreeView?

c# - RibbonControl 正在拉伸(stretch)图像

javascript - 如何在android中单击时将选定的行图标替换为列表项上的另一个图标

listview - Kendo UI ListView 双击选中的项目

android - 更改 ListView 的文本颜色

c# - 进行基础连接时,asp.net 页面加载两次

c# - WPF 将 IsEnabled 属性绑定(bind)到 List 的大小

wpf - 禁用除单击控件之外的整个窗口