2017-08-10 78 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

編輯:太長的評論,也許需要一個新的問題。 –

相關問題