无法将数据从Datagrid绑定到一个选项卡文本框,而是将其绑定在所有4个选项卡文本框中

时间:2019-01-25 05:57:36

标签: wpf mvvm datagrid

在我的用户控件中,我使用了一个组合框和文本框,我将在4个选项卡(查看,添加,更新,删除)中使用此用户控件。在视图选项卡中,我使用了datagrid将数据绑定到文本框。我已经为组合框,保存,删除,更新按钮的可见性编写了Viemodel(VMvisibility)。还有一个viewmodel(ViewModelCust)将数据绑定到datagrid和文本框。

我面临的问题是,存在VMvisibility viewmodel数据不会从datagrid绑定到文本框,但是当我删除VMvisibility viewmodel并在同一窗口类中使用该visibilty属性时,我能够将数据绑定到文本框,但是它将数据绑定到文本框中的所有4个标签,而不是一个标签

UserControl.xaml代码

<StackPanel HorizontalAlignment="Center" VerticalAlignment="Top" >
    <StackPanel Orientation="Horizontal" Name="CustIDList" Visibility="{Binding CustIDVisibility }" >
        <Button x:Name="CustID" Content="Customer ID" Width="100" Margin="82 0 0 0"   />
        <ComboBox Height="25" Width="180" x:Name="ComboID" ItemsSource="{Binding CustomersData}"
                  DisplayMemberPath="CustomerID" SelectedItem="{Binding GetCustomerData}" />
    </StackPanel>
    <StackPanel Orientation="Horizontal" >
        <Label x:Name="CustName" Content="Customer Name" Width="100"  Margin="82 0 0 0"/>
        <TextBox x:Name="BoxName" Margin="2" Width="180" Text="{Binding BindCustomerData.CustomerName}" />
    </StackPanel>
    <StackPanel Orientation="Horizontal">
        <Label  x:Name="CustAge" Content=" Age" Width="100" Margin="82 0 0 0"/>
        <TextBox  x:Name="BoxAge" Margin="2" Width="180"  Text="{Binding BindCustomerData.CustomerAge}"  />
    </StackPanel>
    <StackPanel Orientation="Horizontal" >
        <Label x:Name="CustAddress" Content="Address" Width="100" Margin="82 0 0 0"/>
        <TextBox x:Name="BoxAddress" Margin="2" Width="180"  Text="{Binding BindCustomerData.CustomerAddress}"  />
    </StackPanel>
    <StackPanel Orientation="Horizontal" >
        <Label x:Name="CustEmail" Content="Email ID" Width="100" Margin="82 0 0 0"/>
        <TextBox x:Name="BoxEmail" Margin="2" Width="180"  Text="{Binding BindCustomerData.CustomerEmailID}"  />
    </StackPanel>
    <StackPanel Orientation="Horizontal" >
        <Label x:Name="CustMobile" Content="Mobile No." Width="100" Margin="82 0 0 0" />
        <TextBox x:Name="BoxMobile" Margin="2" Width="180"  Text="{Binding BindCustomerData.CustomerMobile}" />
    </StackPanel>
    <StackPanel Orientation="Horizontal" >
        <Label x:Name="CustUname" Content="User Name"  Width="100" Margin="82 0 0 0"/>
        <TextBox x:Name="BoxUname" Margin="2" Width="180"  Text="{Binding BindCustomerData.CustomerUname}" />
    </StackPanel>
    <StackPanel Orientation="Horizontal"  >
        <Label x:Name="CustPWD" Content="Password" Width="100" Margin="82 0 0 0"/>
        <TextBox x:Name="BoxPWD" Margin="2" Width="180"  Text="{Binding BindCustomerData.CustomerPWD}" />
    </StackPanel>
    <StackPanel Orientation="Horizontal" Margin="82 5 0 0" >
        <TextBlock x:Name="MsgText" Text="Unchanged Details are Not Saved" FontWeight="Bold"
                   Foreground="Red" Height="25" Margin="2"   Visibility="Collapsed" ></TextBlock>
    </StackPanel>

    <StackPanel Orientation="Horizontal" Margin="72 5 0 0" >
        <Button x:Name="CancelBtn" Content="Cancel" Width="100" Height="25" Margin="2" Click="CancelBtn_Click" />
        <Button x:Name="SaveBtn"  Content="Save" Width="100" Height="25" Margin="2" Visibility="{Binding SaveVisibility}" Click="SaveBtn_Click"/>
        <Button x:Name="UpdateBtn" Content="Update" Width="100" Height="25" Margin="2" Visibility="{Binding UpdateVisibility}" Click="UpdateBtn_Click" />
        <Button x:Name="DeleteBtn" Content="Delete" Width="100" Height="25" Margin="2" Visibility="{Binding DeleteVisibility}" Click="DeleteBtn_Click" />
    </StackPanel>


</StackPanel>

Mainwindow.xaml代码

<TabControl x:Name="TabControl1"  Height="400" Width="650" >
                <TabItem Header="View Details" Width="100"  x:Name="Tab1">
                    <StackPanel>
                        <luc:UcustomerUC x:Name="ViewData" Margin="0 20 0 0"></luc:UcustomerUC>

                        <Button Content="UpdateDataGrid" Height="25" Width="auto" HorizontalAlignment="Right" Name="UpGridBtn"
                         Margin="5" Visibility="{Binding UpGridVisibility}"/>

                        <ScrollViewer VerticalScrollBarVisibility="Auto" >
                            <DataGrid AutoGenerateColumns="False" CanUserAddRows="False" ItemsSource="{Binding CustomersData}"
                                ScrollViewer.VerticalScrollBarVisibility="Auto"   MaxHeight="100" x:Name="DGdata"  Margin="0 5 0 5"
                                      SelectedItem="{Binding GetCustomerData}">
                                <DataGrid.Columns>
                                    <DataGridTextColumn Header="CustomerID" Binding="{Binding CustomerID}" IsReadOnly="True" Width="*" />
                                    <DataGridTextColumn Header="CustomerName" Binding="{Binding CustomerName}" IsReadOnly="True" Width="*"/>
                                    <DataGridTextColumn Header="CustomerAge" Binding="{Binding CustomerAge}" IsReadOnly="True" Width="*"/>
                                    <DataGridTextColumn Header="CustomerAddress" Binding="{Binding CustomerAddress}" IsReadOnly="True" Width="*"/>
                                    <DataGridTextColumn Header="CustomerEmail" Binding="{Binding CustomerEmailID}" IsReadOnly="True" Width="*" />
                                    <DataGridTextColumn Header="CustomerMobile" Binding="{Binding CustomerMobile}"  IsReadOnly="True" Width="*"/>
                                    <DataGridTextColumn Header="CustomerUserName" Binding="{Binding CustomerUname}" Visibility="Hidden" Width="*" 
                                                        IsReadOnly="True"/>
                                    <DataGridTextColumn Header="CustomerPWD" Binding="{Binding CustomerPWD}" Visibility="Hidden" Width="*" 
                                                        IsReadOnly="True"/>
                                </DataGrid.Columns>
                            </DataGrid>

                        </ScrollViewer>


                    </StackPanel>
                </TabItem>
                <TabItem Header="Add Details" Width="100"  x:Name="Tab2">
                    <luc:UcustomerUC x:Name="AddData" Margin="0 20 0 0"></luc:UcustomerUC>
                </TabItem>
                <TabItem Header="Update Details" Width="100"  x:Name="Tab3">
                    <luc:UcustomerUC x:Name="UpdateData" Margin="0 20 0 0"></luc:UcustomerUC>
                </TabItem>
                <TabItem Header="Delete Details" Width="100" x:Name="Tab4">
                    <luc:UcustomerUC x:Name="DeleteData" Margin="0 20 0 0"></luc:UcustomerUC>
                </TabItem>
            </TabControl>

Mainwindow.cs代码

public partial class UcustomerForm : Window
{
    public UcustomerForm()
    {
        InitializeComponent();
        ViewData.DataContext = VMvisibility.ViewDetailsVisibile.ViewDetailsBtns();
        AddData.DataContext = VMvisibility.AddDetailsVisibile.AddDetailsBtns();
        UpdateData.DataContext = VMvisibility.UpdateDetailsVisibile.UpdateDetailsBtns();
        DeleteData.DataContext = VMvisibility.DeleteDetailsVisibile.DeleteDetailsBtns();
        //CustomerVisible();

            this.DataContext = new ViewModelCust();
    }

    public void CustomerVisible()
    {
        //View Tab
        ViewData.SaveBtn.Visibility = Visibility.Collapsed;
        ViewData.DeleteBtn.Visibility = Visibility.Collapsed;
        ViewData.UpdateBtn.Visibility = Visibility.Collapsed;
        ViewData.CustIDList.Visibility = Visibility.Collapsed;

        //Add Tab
        AddData.CustIDList.Visibility = Visibility.Collapsed;
        AddData.DeleteBtn.Visibility = Visibility.Collapsed;
        AddData.UpdateBtn.Visibility = Visibility.Collapsed;

        //Update Tab
        UpdateData.SaveBtn.Visibility = Visibility.Collapsed;
        UpdateData.DeleteBtn.Visibility = Visibility.Collapsed;
        //Delete Tab
        DeleteData.UpdateBtn.Visibility = Visibility.Collapsed;
        DeleteData.SaveBtn.Visibility = Visibility.Collapsed;
    }

VMvisibility视图模型代码示例

 public class ViewDetailsVisibile
    {
        static ViewDetailsVisibile details;

        public Visibility CustIDVisibility
        {
            get { return Visibility.Collapsed; }
        }
        public Visibility SaveVisibility
        {
            get { return Visibility.Collapsed; }
        }
        public Visibility DeleteVisibility
        {
            get { return Visibility.Collapsed; }
        }


        public static ViewDetailsVisibile ViewDetailsBtns()
        {
            if (details == null)
                details = new ViewDetailsVisibile();
            return details;
        }
    }

ViewModelCust查看模型代码

class ViewModelCust : INotifyPropertyChanged
{

    public ObservableCollection<tblCustomerDetail> CustomersData { get; set; }
    public tblCustomerDetail getCustomerData;
    public tblCustomerDetail bindCustomerData;



    //To get data to bind in DataGrid
    public ViewModelCust()
    {
            FillCustomerList();

    }

    private void FillCustomerList()
    {
        PurchaseNowEntities entity = new PurchaseNowEntities();
        var userlist = from r in entity.tblCustomerDetails select r;

        if (CustomersData == null)
            CustomersData = new ObservableCollection<tblCustomerDetail>();
        foreach (var r in userlist)
        {
            CustomersData.Add(new tblCustomerDetail
            {
                CustomerID = r.CustomerID,
                CustomerName = r.CustomerName,
                CustomerAge = r.CustomerAge,
                CustomerAddress = r.CustomerAddress,
                CustomerEmailID = r.CustomerEmailID,
                CustomerMobile = r.CustomerMobile,
                CustomerUname = r.CustomerUname,
                CustomerPWD= r.CustomerPWD
            });
        }
    }

    //To get CustomerData of selected row in DataGrid
    public tblCustomerDetail GetCustomerData
    {
        get { 
                return getCustomerData;
        }
        set
        {
            getCustomerData = value;
            OnPropertyChanged("GetCustomerData");
            SelectedCustomer();
        }
    }

    private void SelectedCustomer()
    {
        int IDCust = this.GetCustomerData.CustomerID;
        PurchaseNowEntities entity = new PurchaseNowEntities();
        var userdetails = entity.tblCustomerDetails.Where(x => x.CustomerID == IDCust).FirstOrDefault();
        this.BindCustomerData = userdetails;

    }

    //To bind Customer Data to TextBoxes from Datagrid
    public tblCustomerDetail BindCustomerData
    {
        get { return bindCustomerData; }
        set
        {
            bindCustomerData = value;
            OnPropertyChanged("BindCustomerData");
        }
    }

   }

请帮助我我要去哪里,以及为什么删除VMvisibilty viewmodel后将数据绑定到文本框。

0 个答案:

没有答案