将String插入GridView

时间:2017-08-10 19:11:41

标签: c# wpf xaml

我还在学习WPF并且已经找到了一种方法来做到这一点,这并不是我的学习水平,但还没有找到答案。希望有人可以帮助我!

我的申请目的是成为一个简单的入住/退房计划。在我的主应用程序中,我按名称列出了员工以及2个按钮(输入和输出)以及注释字段。

到目前为止,我已经设法打开一个新的窗口,当' In'或者' Out'单击按钮并提示用户发表评论。我设法将该评论传回我的MainWindow,但现在我不知道如何在GridView中显示它。

以下是MainWindow.cs的样子:

private void menuIn_Click(object sender, RoutedEventArgs e)
{
    var item = (sender as FrameworkElement).DataContext;
    int rowNumber = lvUsers.Items.IndexOf(item) + 1;
    // MessageBox.Show(String.Format("Button row is {0}", rowNumber));

    string userCommentString = "";
    SubWindow subWindow = new SubWindow(userCommentString, rowNumber);
    subWindow.Show();
}

所以' rowNumber'是包含我想要更改的注释字段的行。 ' userCommentString'是我想要进入那一行。如果我知道行号和列号,是不是有一种简单的方法可以将字符串插入到网格中?

1 个答案:

答案 0 :(得分:0)

这是一个小例子,你可以做到这一点。除此之外,我还建议学习MVVM。

XAML:

<ListView x:Name="lvUsers">
    <ListView.View>
        <GridView>
            <GridViewColumn Header="Name" Width="120" DisplayMemberBinding="{Binding Path=Name}" />
            <GridViewColumn Header="Comment" Width="150" DisplayMemberBinding="{Binding Path=Comment}" />
            <GridViewColumn Header="Button">
                <GridViewColumn.CellTemplate>
                    <DataTemplate>
                        <StackPanel Margin="6,2,6,2">
                            <Button Content="Click" Click="Button_Click" />
                        </StackPanel>
                    </DataTemplate>
                </GridViewColumn.CellTemplate>
            </GridViewColumn>
        </GridView>
    </ListView.View>
</ListView>

将项目添加到ListView

lvUsers.Items.Add(new Test() { Name = "User A" });
lvUsers.Items.Add(new Test() { Name = "User B" });
lvUsers.Items.Add(new Test() { Name = "User C" });

点击按钮上的操作行:

private void Button_Click(object sender, RoutedEventArgs e)
{
    //Get row number
    var item = (sender as FrameworkElement).DataContext;
    int rowNumber = lvUsers.Items.IndexOf(item);

    //Use row number to manipulated the right row
    //This should be done after comment is passed back to MainWindow
    Test t = (Test)lvUsers.Items[rowNumber];
    t.Comment = "new comment";
    lvUsers.Items.Refresh();
}

测试类:

public class Test
{
    public string Name { get; set; }
    public string Comment { get; set; }
}