在我的用户控件中,我使用了一个组合框和文本框,我将在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后将数据绑定到文本框。