2017-08-10 79 views
0

我还在学习WPF,并且寻找了一种方法来做到这一点,这并不超出我的学习水平,但还没有找到答案。希望有人能帮助我!在GridView中插入一个字符串

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

到目前为止,我设法打开一个新窗口,当点击'进'或'出'按钮并提示用户发表评论时。我已经设法将该评论传回给我的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'是我想要进入该行的内容。如果我知道行号和列号,是否没有简单的方法将字符串插入网格?

+0

嗨乔希!我会建议你使用MVVM。任何对您的代码进行小修改的答案都不会对您的WPF职业生涯有所帮助,因为您在这里使用传统的命令式编程技术。如果您使用的是MVVM,则只需将您的新项目插入到ObservableCollection中,然后将数据绑定到它所显示的控件。 – hoodaticus

+0

我没有计划开始WPF职业生涯,因为我只负责创建此结算程序,因为我们旧的功能已经失效,我在大学里开了一些编程课。当时的想法是,当我不忙时,这将是一个“简单的项目”。不过,如果你能指点我一个很好的教程,我很乐意学习MVVM。 –

+0

正确地遵循MVVM需要相当的纪律,并且需要大量的学习投资。如果你不认为这是你的职业生涯的方向,那么你可能会考虑通过WPF的WinForms。 “模式背后的代码”比WinForm更容易和更宽容,而不是WPF。 –

回答

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; } 
} 
+0

这段文字出现错误: Test t =(Test)lvUsers.Items [rowNumber]; System.NullReferenceException:'未将对象引用设置为对象的实例。' lvUsers为null。 这是告诉我什么? –

+0

您是否使用过'Test'类将项目添加到lvUsers? – Ben

+0

编辑:太长的评论,也许需要一个新的问题。 –

相关问题