在我的 WPF C# 应用程序中,我创建了一个显示客户姓名的文本框。姓名由名字、中间名和姓氏组成。我想要实现的是,文本框在没有键盘焦点时显示全名(即连接在一起的 3 个名称,用空格分隔),并在全名文本框内的 3 个不同文本框中显示 3 个名称。 FullName 文本框获得键盘焦点。 我尽了最大努力并实现了控制,但我无法实现的是获取数据并保存数据更改。
这是我的数据库脚本:
USE [MyDB]
GO
/****** Object: Table [dbo].[Customers] Script Date: 12/7/2023 7:57:47 AM ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[Customers](
[ID] [int] IDENTITY(1,1) NOT NULL,
[FirstName] [nvarchar](50) NULL,
[MiddleName] [nvarchar](50) NULL,
[LastName] [nvarchar](50) NULL,
CONSTRAINT [PK_Customer] PRIMARY KEY CLUSTERED
(
[ID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, OPTIMIZE_FOR_SEQUENTIAL_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]
GO
SET IDENTITY_INSERT [dbo].[Customers] ON
GO
INSERT [dbo].[Customers] ([ID], [FirstName], [MiddleName], [LastName]) VALUES (1, N'Dees', N'Niis', N'Muus')
GO
INSERT [dbo].[Customers] ([ID], [FirstName], [MiddleName], [LastName]) VALUES (2, N'Jiis', N'Kiss', N'Juss')
GO
INSERT [dbo].[Customers] ([ID], [FirstName], [MiddleName], [LastName]) VALUES (3, N'Nyuus', N'Nyap', N'Kip')
GO
SET IDENTITY_INSERT [dbo].[Customers] OFF
GO
您正在用错误的值覆盖
DataContext
的正确 ContentControl
。这就是为什么你的绑定无法解析的原因。
ContentControl.Content
属性的值为全名:
<ContentControl Content="{Binding Path=FullName}" />
要知道的重要部分是
DataContext
的 ContentControl
是从 Window
继承的,因此是 CustomerModel
实例。
到目前为止一切顺利。但是在您的
ControlTemplate
中,您覆盖了继承的 DataContext
并将其设置为 Content
属性的值。该值是全名(来自CustomerModel.FullName
):
<ControlTemplate x:Key="MultiTextBoxTemplate" TargetType="ContentControl">
<Grid DataContext="{TemplateBinding Content}">
要使其工作,只需不要覆盖(正确的)
DataContext
:
<ControlTemplate x:Key="MultiTextBoxTemplate" TargetType="ContentControl">
<!-- DataContext is inherited from the Window and is the CustomerModel -->
<Grid>
现在您的绑定将成功使用
CustomerModel
作为绑定源。