【问题标题】:how to add text from textboxes and add it to datagrid using MVVM Wpf如何使用 MVVM Wpf 从文本框中添加文本并将其添加到数据网格
【发布时间】:2017-01-23 02:53:49
【问题描述】:

如何使用 MVVM Wpf 从文本框中添加文本并将其添加到数据网格?

代码:

public class GtlS4Model : INotifyPropertyChanged
{
    private Double sNo;
    private Double deliveryNo;
    private Double srNo;
    private Double custPartNo;
    private Double binS4Label;
    private Double masterData;

    public double SNo
    {
        get
        {
            return sNo;
        }

        set
        {
            sNo = value;
            OnPropertyChanged( "SNo");
        }
    }

    public double DeliveryNo
    {
        get
        {
            return deliveryNo;
        }

        set
        {
            deliveryNo = value;
            OnPropertyChanged( "Delivery_No");
        }
    }

    public double SrNo
    {
        get
        {
            return srNo;
        }

        set
        {
            srNo = value;
            OnPropertyChanged( "SrNo");
        }
    }

    public double CustPartNo
    {
        get
        {
            return custPartNo;
        }

        set
        {
            custPartNo = value;
            OnPropertyChanged("CustPartNo");
        }
    }

    public double BinS4Label
    {
        get
        {
            return binS4Label;
        }

        set
        {
            binS4Label = value;
            OnPropertyChanged( "BinS4Label");
        }
    }

    public double MasterData
    {
        get
        {
            return masterData;
        }

        set
        {
            masterData = value;
            OnPropertyChanged("MasterData");            }
    }

    public event PropertyChangedEventHandler PropertyChanged;
    private void OnPropertyChanged ( string propertyName )
    {
        if (PropertyChanged != null)
        {
            PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
        }
    }

}

现在查看模型:

public class GtlS4ViewModel
{
    public ObservableCollection<GtlS4Model> gtls4Label { get; set; }

    DataTable dt;
    public void addTables()
    {
        dt.Columns.Add("S No.");
        dt.Columns.Add("Delivery Note");
        dt.Columns.Add("Sr No.");
        dt.Columns.Add("Customer Part No.");
        dt.Columns.Add("Bin S-4 Label");
        dt.Columns.Add("Result");
        var row1 = this.dt.NewRow();
        var row2 = this.dt.NewRow();
        var row3 = this.dt.NewRow();
        var row4 = this.dt.NewRow();
        var row5 = this.dt.NewRow();
        var row6 = this.dt.NewRow();
        row1["S No."] = 1;
        row2["Delivery Note"] = 123456;
        row3["Sr No."] = 1235143;
        row4["Customer Part No."] = 56487564;
        row5["Bin S4 Label"] = 5555656;
        row6["Result"] = 6556456454564564;
        this.dt.Rows.Add(row1);
        this.dt.Rows.Add(row2);
        this.dt.Rows.Add(row3);
        this.dt.Rows.Add(row4);
        this.dt.Rows.Add(row5);
        this.dt.Rows.Add(row6);
    }

    public GtlS4ViewModel()
    {
        dt = new DataTable();
        gtls4Label = new ObservableCollection<GtlS4Model>
        {
            new GtlS4Model {SNo = 1, DeliveryNo= 1325647, SrNo = 1515151, CustPartNo = 32156444, BinS4Label = 56456456, MasterData = 86864564564},
        };
    }            
}

查看:

<Window x:Class="Gtl_S4_Validator.Views.Window1"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:Gtl_S4_Validator.Views"
        xmlns:vm="clr-namespace:Gtl_S4_Validator.ViewModel"
        mc:Ignorable="d"
        Title="Window1" Height="720" Width="525">
    <Window.Resources>
        <vm:GtlS4ViewModel x:Key="ViewModelMain"/>
    </Window.Resources>
    <Grid Margin="-4,0,-4,-1">
        <TextBox x:Name="txtSno" HorizontalAlignment="Left" Height="24" Margin="97,23,0,0" TextWrapping="Wrap" VerticalAlignment="Top" Width="82" RenderTransformOrigin="0.666,-0.434"/>
        <TextBox x:Name="txtDeliveryNo" HorizontalAlignment="Left" Height="21" Margin="97,61,0,0" TextWrapping="Wrap" VerticalAlignment="Top" Width="82"/>
        <Label x:Name="label" Content="S. No." HorizontalAlignment="Left" Margin="10,21,0,0" VerticalAlignment="Top"/>
        <Label x:Name="label1" Content="Delivery Note" HorizontalAlignment="Left" Margin="10,59,0,0" VerticalAlignment="Top"/>
        <Label x:Name="label2" Content="Sr. No." HorizontalAlignment="Left" Margin="10,100,0,0" VerticalAlignment="Top"/>
        <Label x:Name="label3" Content="Customer Part no." HorizontalAlignment="Left" Margin="253,23,0,0" VerticalAlignment="Top"/>
        <TextBox x:Name="txtSrNo" HorizontalAlignment="Left" Height="23" Margin="97,100,0,0" TextWrapping="Wrap" VerticalAlignment="Top" Width="82"/>
        <TextBox x:Name="txtCustPartNo" HorizontalAlignment="Left" Height="24" Margin="376,23,0,0" TextWrapping="Wrap" VerticalAlignment="Top" Width="91"/>
        <Label x:Name="label4" Content="Bin S-4 Label" HorizontalAlignment="Left" Margin="253,59,0,0" VerticalAlignment="Top"/>
        <TextBox x:Name="txtBinS4Label" HorizontalAlignment="Left" Height="23" Margin="376,59,0,0" TextWrapping="Wrap" VerticalAlignment="Top" Width="91"/>
        <TextBox x:Name="txtMasterData" HorizontalAlignment="Left" Height="23" Margin="376,100,0,0" TextWrapping="Wrap" VerticalAlignment="Top" Width="91" RenderTransformOrigin="0.337,0.445"/>
        <Label x:Name="label5" Content="Master Data" HorizontalAlignment="Left" Margin="253,97,0,0" VerticalAlignment="Top"/>
        <Button x:Name="btnValidate" Content="Validate" HorizontalAlignment="Left" Height="27" Margin="182,141,0,0" VerticalAlignment="Top" Width="131" Click="btnValidate_Click"/>
        <DataGrid x:Name="GtlS4DataGrid" HorizontalAlignment="Left" Height="408" Margin="10,203,0,0" VerticalAlignment="Top" Width="505" ItemsSource="{Binding gtls4Label}" CanUserAddRows="True">
            <DataGrid.Columns>
                <DataGridTextColumn Header="S No"  Binding="{Binding SNo}"/>
                <DataGridTextColumn Header="Delivery Note" Binding="{Binding Delivery Note}" />
                <DataGridTextColumn Header="Sr No" Binding="{Binding Sr No}" />
                <DataGridTextColumn Header="Customer Part No." Binding="{Binding CustomerPartNo }" />
                <DataGridTextColumn Header="Bin S4 Label" Binding="{Binding BinS4Label}" />
                <DataGridTextColumn Header="Result" Binding="{Binding MasterData}" />
            </DataGrid.Columns>
        </DataGrid>
        <Button x:Name="btnExport" Content="Export" HorizontalAlignment="Left" Margin="182,616,0,0" VerticalAlignment="Top" Width="75"/>
        <Button x:Name="btnClear" Content="Clear" HorizontalAlignment="Left" Margin="283,616,0,0" VerticalAlignment="Top" Width="75"/>

    </Grid>
</Window>

我不明白我怎么做错了,但它没有从按钮添加任何数据,而且我对这个环境完全陌生。

任何帮助将不胜感激。

【问题讨论】:

  • 你能澄清一下你真正想要它做什么吗?网格中的每一列都有一个文本框。您是否希望文本框显示/更新当前选定行的相应列?您是否希望文本框向视图模型的 DataTable dt 添加一行?说到这,DataTable 对我来说看起来完全没有用。有什么意义?
  • 我只想为输入到文本框中的数据添加一个新行并将其显示到网格上
  • 是的,数据表完全不用

标签: c# wpf xaml mvvm


【解决方案1】:

好的,所以你想在文本框中输入文本并让它出现在数据网格中?

如果是这样,您希望文本出现在新行还是现有行中?

您可以在将文本输入到文本框中完成时处理一个事件。

您需要将数据网格绑定到模型中的属性。

当文本框更新时,您更新绑定到数据网格的模型中的属性,并且视图应该更新。

【讨论】:

  • 我想在现有文本框中的新行上添加数据。但是,由于我是环境新手,所以我无法做到!
【解决方案2】:

您可以简单地将数据网格的“用户可以添加新行”属性设置为 true,然后数据网格将始终在底部显示一个空白行以创建新条目。这是微软的官方页面:https://msdn.microsoft.com/en-us/library/system.windows.controls.datagrid.canuseraddrows(v=vs.110).aspx

【讨论】:

  • 是的,但是当我通过 mvvm 模式单击按钮时,我想添加文本框值
猜你喜欢
  • 1970-01-01
  • 2020-07-31
  • 1970-01-01
  • 2016-08-27
  • 1970-01-01
  • 2019-02-28
  • 1970-01-01
  • 2019-03-15
  • 1970-01-01
相关资源
最近更新 更多