KR20060059335A - System and method for controlling user interface properties with data - Google Patents
System and method for controlling user interface properties with data Download PDFInfo
- Publication number
- KR20060059335A KR20060059335A KR1020047010780A KR20047010780A KR20060059335A KR 20060059335 A KR20060059335 A KR 20060059335A KR 1020047010780 A KR1020047010780 A KR 1020047010780A KR 20047010780 A KR20047010780 A KR 20047010780A KR 20060059335 A KR20060059335 A KR 20060059335A
- Authority
- KR
- South Korea
- Prior art keywords
- binding
- data value
- user interface
- attribute
- source data
- Prior art date
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F15/00—Digital computers in general; Data processing equipment in general
- G06F15/16—Combinations of two or more digital computers each having at least an arithmetic unit, a program unit and a register, e.g. for a simultaneous processing of several programs
- G06F15/163—Interprocessor communication
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/30—Creation or generation of source code
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30098—Register arrangements
- G06F9/3012—Organisation of register space, e.g. banked or distributed register file
Abstract
Description
본 출원은 마이크로소프트 코오퍼레이션이 2003년 5월 17일자로 미국에서 국제 출원을 하고 미국을 제외한 모든 국가를 지정하여 출원된 PCT 출원이다.This application is a PCT application filed by Microsoft Corporation on May 17, 2003, filed internationally in the United States, and designated for all countries except the United States.
사용자에게 정보를 제공하는 방식은 그 정보를 이해하고 파악하는 사용자의 능력에 영향을 미친다. 컴퓨터 디스플레이(display)에서, 색, 폰트 스타일(font style) 등을 이용하여 정보를 강조하는 것을 추가하는 것은 일반적인 일이 되었다. 이러한 강조는 사용자가 정보의 중요성을 보다 용이하기 파악할 수 있게 한다. 정보의 표현을 처리하는 코드(code)(사용자 인터페이스) 및 그 정보에 대해 애플리케이션 로직(logic)을 수행하는 코드는 통상적으로 긴밀하게 연결된다. 예를 들면, 로직은 사용자 인터페이스 속성(색, 폰트, 위치, 사이즈)에 데이터를 직접적으로 할당한다. 그러므로, 사용자 인터페이스에 변경이 있을 때, 로직 또한 변경해야 한다. 예를 들면, 텍스트 박스의 경우, 사용자 인터페이스 코드는 변경시에 텍스트가 변경되었는지 여부를 결정하도록 듣고, 사용자 인터페이스 코드는 변경된 텍스트를 확인한 다음 변경된 텍스트를 디스플레이(display)한다. 이와 같이 밀접하게 연결되는 사용자 인터페이스와 로직으로 인해, 본질적으로 상당히 약한 코드를 산출하게 된다. 이러한 약한 코드를 유지하는 데는 상당한 비용과 시간이 든다.The manner in which the information is presented to the user affects the user's ability to understand and understand the information. In computer displays, it has become common to add emphasis to information using colors, font styles, and the like. This emphasis makes it easier for users to grasp the importance of information. Code (user interface) that handles the representation of information and code that performs application logic on that information are typically tightly coupled. For example, logic directly assigns data to user interface attributes (color, font, position, size). Therefore, when there is a change in the user interface, the logic must also change. For example, in the case of a text box, the user interface code listens to determine whether the text has changed at the time of change, and the user interface code checks the changed text and then displays the changed text. This tightly coupled user interface and logic results in inherently weak code. Maintaining this weak code is costly and time consuming.
본 발명은 사용자 인터페이스를 데이터에 따라 제어하기 위한 시스템 및 방법에 관한 것이다. 본 발명은 사용자 인터페이스와 애플리케이션 로직과 함께, 데이터를 그 데이터를 사용자 인터페이스에 관련시키는 메카니즘(mechanism)을 제공함으로써 분리시킨다. 본 발명은 사용자 인터페이스 설계자 및 애플리케이션 로직을 작성하는 애플리케이션 작성자가 독립적으로 작업할 수 있게 한다. 설계자와 작성자 어느 누구도 서로의 코드를 이해할 필요가 없고 서로의 코드 개발에 영향을 주지도 않을 것이다. 본 발명은 또한 사용자 인터페이스의 변경이 매우 쉽게 이루어지도록 한다. 예를 들면, 새롭고 보다 더 사용자를 끄는 사용자 인터페이스 플랫폼(platform)이 이용가능해 지거나 사용자 인터페이스 설계자가 애플리케이션의 외관이 변경되길 원할 때, 설계자는 그 애플리케이션 로직을 변경할 필요가 없다. 게다가, 사용자 인터페이스에 데이터를 관련시키는 메카니즘은 동적이다. 이는 데이터에서의 임의의 변경이 자동적으로 표현에 반영되도록 한다. 게다가, 사용자 인터페이스를 통한 사용자로부터의 임의의 입력은 자동적으로 데이터를 갱신할 수 있다. 본 발명이 사용자 인터페이스의 데이터 디스플레이 양상(예를 들면, 텍스트) 뿐만 아니라, 시각적인 양상(예를 들면, 배경, 폰트 사이즈, 등)까지의 연관성을 허용하므로, 데이터를 설명적이고, 시각적으로 향상되고 유연성있게 표현할 수 있다. 예를 들면, 음수는 붉은 색으로 표시될 수 있거나 주가가 상승했을 때 화살표가 위쪽을 가리키도록 나타낼 수 있다.The present invention relates to a system and method for controlling a user interface in accordance with data. The present invention, along with user interface and application logic, separates data by providing a mechanism for associating that data with the user interface. The present invention allows user interface designers and application writers who write application logic to work independently. Neither the designer nor the author need to understand each other's code, nor will they affect each other's code development. The invention also makes it very easy to change the user interface. For example, when a new and more user-friendly user interface platform becomes available or the user interface designer wants to change the appearance of the application, the designer does not need to change the application logic. In addition, the mechanism for associating data with the user interface is dynamic. This allows any change in the data to be automatically reflected in the representation. In addition, any input from the user through the user interface can automatically update the data. The present invention allows associations not only to the data display aspect of the user interface (eg text), but also to the visual aspect (eg background, font size, etc.), thereby improving data explanatory and visually. I can express it flexibly. For example, negative numbers may be displayed in red or may indicate that an arrow points upward when the stock price rises.
그러므로, 본 발명에 따르면, 애플리케이션은 로직 영역 및 UI 영역의, 독립 된 부분으로 나뉘어질 수 있다. 로직 영역은 애플리케이션 내의 데이터 값들을 조작한다. UI 영역은 데이터의 표현을 담당한다. 바인딩 명세(binding specification)에는 UI 속성과 데이터 값 간의 관계가 기술되어 있다. 이 바인딩 명세는 시스템 레벨 코드에 의해 데이터 값이 변화를 겪을 때 통지되는 방식 및 UI 속성에 그 변경을 반영하도록 UI 영역에 지시하는 방식을 결정하도록 사용된다. 바인딩 명세는 소스 데이터 아이템, 소스 데이터 아이템의 데이터 값의 경로, 대상 UI 엘리먼트, 및 대상 UI 엘리먼트의 UI 속성을 식별한다. 이 바인딩은 코드 또는 마크업 언어를 이용하여 지정될 수 있다. Therefore, according to the present invention, the application can be divided into independent parts of the logic area and the UI area. Logic regions manipulate data values within the application. The UI area is responsible for the representation of the data. The binding specification describes the relationship between UI properties and data values. This binding specification is used to determine how the system level code is to be notified when a data value undergoes a change and how to instruct the UI area to reflect that change in UI attributes. The binding specification identifies the source data item, the path of the data value of the source data item, the target UI element, and the UI attribute of the target UI element. This binding can be specified using code or markup language.
도 1은 본 발명의 예시적인 구현에서 사용될 수 있는 예시적인 컴퓨팅 장치를 도시함.1 illustrates an example computing device that may be used in an exemplary implementation of the invention.
도 2는 본 발명에 따라 데이터를 가지는 사용자 인터페이스 속성을 제어하는 일 실시예를 도시하는 기능적인 블럭도.2 is a functional block diagram illustrating one embodiment of controlling user interface attributes with data in accordance with the present invention.
도 3은 본 발명의 일 실시예에 따라 데이터 값을 가지는 사용자 인터페이스 속성에 바인딩하는 프로세스를 도시하는 논리적인 흐름도.3 is a logical flow diagram illustrating a process of binding to a user interface attribute having a data value in accordance with one embodiment of the present invention.
도 4는 본 발명의 실시예에 따라 사용자 인터페이스 속성을 데이터와 관련시키기 위한 몇몇의 예시적인 구문.4 is some exemplary syntax for associating user interface attributes with data in accordance with an embodiment of the invention.
본 발명은 사용자 인터페이스를 데이터에 따라 제어하는 시스템 및 방법을 제시한다. 본 발명은 데이터를 사용자 인터페이스와 관련시키는 메커니즘을 제공 함으로써 사용자 인터페이스와 애플리케이션 로직을 분리시킨다. 이하에 자세히 기술될 바와 같이, 사용자 인터페이스와 데이터의 이러한 분리는, 그것의 관련 로직에 따라서, 개발자의 다른 그룹들이 사용자 인터페이스 및 로직에서 모두 다른 그룹의 코드 개발에 영향을 미치지 않고 독립적으로 작업할 수 있게 한다. 게다가, 이하 상세한 설명에서는, 본 발명은 데이터 소스로부터 사용자 인터페이스 등에게 값들을 자동적으로 전송하는 시스템 및 방법을 제공한다. 이하의 논의를 통하여, "데이터 바인딩"이라는 용어는 데이터 값들을 UI 속성에 관련시키고, 데이터 값들을 전송하고 갱신하는 등의 과정을 칭한다.The present invention provides a system and method for controlling a user interface in accordance with data. The present invention separates user interface and application logic by providing a mechanism for associating data with a user interface. As will be described in detail below, this separation of user interface and data, depending on its associated logic, allows different groups of developers to work independently without affecting the development of other groups of code both in the user interface and logic. To be. In addition, in the following detailed description, the present invention provides a system and method for automatically transferring values from a data source to a user interface or the like. Throughout the discussion below, the term "data binding" refers to a process of associating data values with a UI attribute, sending and updating data values, and the like.
예시적인 컴퓨팅 환경Example Computing Environment
도 1은 본 발명의 예시적인 구현에서 사용될 수 있는 예시적인 컴퓨팅 장치를 도시한다. 도 1의 참조하면, 매우 기본적인 구성으로서, 컴퓨팅 장치(100)는 통상적으로 적어도 하나의 프로세싱 유닛(102) 및 시스템 메모리(104)를 포함한다. 컴퓨팅 장치(100)의 정확한 구성 및 유형에 따라, 시스템 메모리(104)는 (RAM과 같은) 휘발성, (ROM, 플래쉬 메모리 등과 같은) 비휘발성 또는 이 둘의 임의 조합일 수 있다. 시스템 메모리(104)는 통상적으로 오퍼레이팅 시스템(105), 하나 이상의 프로그램 모듈(106)을 포함하고, 프로그램 데이터(107)를 포함할 수 있다. 프로그램 모듈(106)의 예는 브라우저 애플리케이션, 재정 관리 애플리케이션, 워드 프로세서 등을 포함한다. 이러한 기본적인 구성은 도 1에서 점선(108) 안의 이들 컴포넌트로 도시된다.1 illustrates an example computing device that may be used in an example implementation of the invention. Referring to FIG. 1, in a very basic configuration,
컴퓨팅 장치(100)는 추가적인 특징 또는 기능을 가질 수 있다. 예를 들면, 컴퓨팅 장치(100)는, 예를 들면, 자기 디스크, 광 디스크, 또는 테입과 같은 추가적인 데이터 저장 장치(분리형 및/또는 비분리형) 또한 포함할 수 있다. 이러한 추가적인 저장 장치는 도 1에서 분리형 저장 장치(109) 및 비분리형 저장 장치(110)로 도시된다. 컴퓨터 저장 매체는 컴퓨터 판독가능 명령어, 데이터 구조, 프로그램 모듈 또는 다른 데이터와 같은, 정보의 저장을 위한 임의의 방법 및 기술로 구현된 휘발성 및 비휘발성, 분리형 및 비분리형 매체를 포함할 수 있다. 시스템 메모리(104), 분리형 저장 장치(109) 및 비분리형 저장 장치(110)는 컴퓨터 저장 매체의 모든 예이다. 컴퓨터 저장 매체는 RAM, ROM, EEPROM, 플래쉬 메모리 또는 다른 메모리 기술, CD-ROM, DVD, 다른 광 저장 장치, 자기 카세트, 자기 테입, 자기 디스크 저장 장치 또는 다른 자기 저장 장치, 또는 컴퓨팅 장치(100)에 의해 액세스될 수 있고 원하는 정보를 저장하는 데 사용될 수 있는 임의의 기타 매체를 포함하지만, 이에 한정되지 않는다. 임의의 이러한 컴퓨터 저장 매체는 컴퓨팅 장치(100)의 일부일 수 있다. 컴퓨팅 장치(100)는 키보드, 마우스, 팬, 음성 입력 장치, 접촉 입력 장치 등과 같은 입력 장치(들)(112) 또한 가질 수 있다. 디스플레이, 스피커, 프린터 등과 같은 출력 장치(들)(114) 또한 포함될 수 있다. 이들 장치들은 본 기술 분야에서 잘 알려져 있으므로 본 명세서에서 장황하게 기술될 필요가 없다.
컴퓨팅 장치(100)는 네트워크 상에서와 같이, 장치(100)가 다른 컴퓨팅 장치(118)와 통신하도록 하는 통신 접속(116) 또한 포함할 수 있다. 통신 접속(116)은 통신 매체의 일례이다. 통신 매체는 통상적으로 반송파 또는 기타 전송 메카니즘 등의 변조된 데이터 신호에서 컴퓨터 판독가능 명령, 데이터 구조, 프로그램 모듈, 또는 다른 데이터에 의해 구현될 수 있으며, 임의의 정보 전달 매체를 포함한다. "변조된 데이터 신호"라는 용어는 신호 내에 정보를 인코딩하도록 설정되거나 변환된 특성을 하나 또는 그 이상을 갖는 신호를 의미한다. 예로서, 통신 매체는 유선 네트워크 또는 직접 유선 접속 등의 유선 매체와, 음향, RF, 적외선 및 기타 무선 매체 등의 무선 매체를 포함하지만, 이에 한정되지 않는다. 본 명세서에서 사용되는 컴퓨터 판독가능 매체라는 용어는 저장 장치 및 통신 매체를 포함한다.
예시적인 구현Example implementation
도 2는 본 발명에 따라 데이터를 가지는 사용자 인터페이스 속성들을 제어하는 시스템(200)의 일 실시예를 도시하는 기능적인 블럭도이다. 시스템(200)은 애플리케이션(202), 플랫폼(220) 및 데이터 소스(230)를 포함한다. 애플리케이션(202)은 도 1에 도시된 컴퓨팅 장치(100) 상의 애플리케이션(106) 중의 하나일 수 있다. 애플리케이션(202)은 데이터 값(예를 들면, 소스 데이터 값(238))을 조작하는 (본 명세서에서 이하 로직(204)이라고 칭할) 코드를 포함한다. 일반적으로, 로직(204)은 데이터 값들의 검증을 수행하고 데이터 값들을 갱신한다. 데이터 값(예를 들면, 데이터 값(238))은 데이터 아이템(예를 들면, 데이터 아이템(232))의 속성(즉, 데이터 소스 속성)의 내용을 나타낸다. 데이터 아이템(232)은 데이터 소스(예를 들면, 데이터 소스(230)) 내에 위치된다. 각 데이터 소스(230)는 몇몇의 데이터 아이템들을 포함할 수 있고, 각 데이터 아이템은 소스 데이터 값이 저장되는 하나 이상의 속성을 가진다. 로직(203)은 복수의 데이터 소스로부터의 데이터 값 들을 조작할 수 있다. 데이터 소스들은 XML 문서, 객체, 데이터셋 등을 포함할 수 있다. 이하에 더 상세히 기술될 바와 같이, 데이터 아이템의 속성 각각은 사용자 인터페이스(UI)를 제어하는 데에 이용된다.2 is a functional block diagram illustrating one embodiment of a
애플리케이션(202)은 또한 정보를 표현하는 (본 명세서에서 이하 사용자 인터페이스(206)라 칭할) 코드를 포함한다. 사용자 인터페이스(206)는 몇몇의 사용자 인터페이스 엘리먼트(예를 들면, 사용자 인터페이스 엘리먼트(208))을 포함한다. 각각의 사용자 인터페이스 엘리먼트(208)는 디스플레이된 텍스트, 색, 폰트, 위치, 사이즈 등과 같은, 하나 이상의 속성(예를 들면, UI 속성(210 및 212))을 포함한다. 그 다음, 상세히 후술될 바와 같이, 본 발명에 따라 이들 UI 속성(210 및 212)은 하나 이상의 데이터 값(238 및 242)과 관련된다. 일반적으로, 이 연관성은 플랫폼(220) 내의 바인딩 엔진(224)을 통해 일어난다. 플랫폼(220)은 오퍼레이팅 시스템, 가상 엔진 등과 같이, 서비스의 시스템 계층을 나타낸다. 플랫폼(220)은 데이터 값(234 및 242)에 부속하는 계층적인 정보의 유지 및 데이터 값과 관련되는 속성들의 갱신을 담당하는 속성 엔진(222)을 포함한다. 바인딩 엔진(224) 및 속성 엔진(222)은 개별적인 컴포넌트들로 도시되지만, 본 기술 분야에서 숙련된 기술을 가진 자라면 각각에 의하여 제공되는 기능이 본 발명에서 벗어나지 않으면서 한 컴포넌트 내에 포함될 수 있다는 것을 인식할 것이다.The
데이터 값(238 및 242)과 그들의 UI 속성(210 및 212)의 연관성(즉, 바인딩)은 데이터 값으로부터 UI 속성으로의 점선으로 도 2에 도시된다(본 명세서에서는 이하 바인딩(226 및 228)이라고 칭함). 이하의 논의에서, "데이터 값"이라는 용어 는 "소스 데이터 값"이라는 용어와 호환되게 사용될 수 있다. 유사하게, UI 속성이라는 용어는 "대상 속성"이라는 용어와 호환되게 사용될 수 있다. 이들 바인딩(226 및 228)은 동적 속성들(즉, 대상 속성들)이 임의의 객체의 속성들로부터와 같이, 데이터 값(즉, 소스 데이터 값)으로부터 자동적으로 설정될 수 있게 한다. 이들 바인딩은 소스 데이터 값의 변경들이 반영되도록 바인딩된 대상 속성을 자동적으로 갱신시키는 동적일 수 있다. The association (ie, binding) of the data values 238 and 242 with their UI attributes 210 and 212 is shown in FIG. 2 by dotted lines from the data values to the UI attributes (hereafter referred to as
이러한 자동적인 갱신 기능을 제공하기 위하여, 본 발명은 통지 메카니즘(예를 들면, 통지자(236 및 240) 및 통지자들로부터 플랫폼(220)으로의 화살표들에 의해 도 2에 도시됨)을 더 제공한다. 각각의 데이터 아이템(232 및 234)은 각각, 대응하는 통지자(236 및 240)를 가진다. 통지 메카니즘은 시스템에게 소스 데이터 값이 변경되었고 데이터 값이 대상 속성(즉, UI 속성)으로 전달될 수 있음을 알리는 것을 담당한다.In order to provide this automatic update function, the present invention further provides a notification mechanism (eg, shown in FIG. 2 by arrows from
마크업, 코드, 등을 통하여서와 같이, 바인딩(226 및 228)이 생성되면, 바인딩 엔진(224)은 그 바인딩과 관련되는 바인딩 객체(예를 들면, 바인딩 객체(250 및 252))를 생성한다. 예를 들면, 바인딩 객체(252)는 바인딩 엔진(224) 내의 바인딩(228)을 나타낼 수 있다. 각각의 바인딩 객체는 몇몇의 속성(예를 들면, 바인딩 속성(260-272))을 포함한다. 이들 바인딩 속성(260-272) 각각은 프로그램으로 설정될 수 있다. 이하의 논의는 각각의 이들 속성을 기술하고 도 4는 이들 속성들의 몇몇을 지정하는 바인딩을 활성화하는 예시적인 코드를 도시한다.When
(본 명세서에서 이하 경로(260)라 칭할) 바인딩 속성 중 하나는 (소스 객체 를 통하여) 소스 데이터 값들을 위치시키는 방식을 식별한다. 경로(260)는 속성, 소스 객체에서의 부속성 또는 색인자, ADO(ActiveX Data Object)의 열, XML의 XPath 등을 참조할 수 있다. 또는 경로는 리플렉션(reflection) 또는 ADO 경로를 참조할 수 있다.One of the binding attributes (hereafter referred to as
(본 명세서에서 이하 바인드타입(262)이라 칭할) 바인딩 속성 중 다른 하나는 바인딩(226 및 228)의 타입을 정의한다. 일 실시예에서, 바인드 타입은 oneWay, twoWay, 및 oneTime을 포함한다. 도시된 바와 같이, 바인딩(226)은 twoWay 바인딩을 나타내고 바인딩(228)은 twoWay 바인딩을 나타낸다. 이들 바인딩 타입 중 하나가 디폴트(default)로 설정된다. 일실시예에서, twoWay 바인딩이 디폴트 바인딩 타입으로 설정된다.The other of the binding attributes (hereinafter referred to as
바인드타입(262)이 oneWay로 지정되면, 이는 관련된 소스 데이터 값에 변경이 일어날 때마다 바인딩 엔진(224)에게 대상 속성(예를 들면, UI 속성(210))을 갱신하라는 신호를 보낸다. oneWay 바인드타입은 데이터 값을 텍스트 색, 텍스트 배경 등의 편집 불가한 UI 속성에 바인딩하기에 유용하다. 이하 기술될 바와 같이, oneWay 바인드타입을 사용하는 것은 twoWay 바인드타입의 오버헤드(overhead)를 피할 수 있다. 오버헤드에서의 이러한 감소는 레이아웃 내용에 관한 UI 속성에서의 변경을 들을 때 가장 주목할 만하다. 이들 UI 속성의 경우, UI 속성의 각각의 자식의 동적인 속성들은 UI 속성의 변경에 대하여 반드시 들어야 한다. oneWay 바인드타입은 UI 속성에서의 변경이 다른 표현을 자세히 보여줄 때도 유용할 수 있다.If
바인드타입(262)이 twoWay로 지정되면, 이는 바인딩 엔진(224)에 소스 데이 터 값 등에 일어나는 모든 변경마다 대상 속성을 갱신하라는 신호를 보낸다. twoWay 바인딩은 사용자에 의해서 행해진 임의의 변경을 소스 데이터 값에게 전달할 필요가 있는 편집 박스에 데이터를 바인딩시킬 때 특히 유용하다. twoWay 바인딩의 다른 시나리오는 다른 애플리케이션이 소스 데이터 필드를 담당하고 편집 박스에 이들 변경이 반영될 때이다.If
바인드타입(262)이 oneTime으로 정해지면, 이는 바인딩 엔진(224)에게 한번에 대상 속성을 초기화한 다음에는, 관련된 소스 데이터 값이 변경이 된 경우라도 착수되지 않은 상태로 남겨두라는 신호를 보낸다. oneTime 바인드타입은 몇몇의 대상 속성이 소스 필드로부터의 몇몇의 값으로 초기화될 필요가 있고 그 데이터 문맥은 미리 알려지지 않을 때 유용하다. 또한, oneTime 바인드타입은 소스 데이터 값들을 변경시키지 않는 읽기 전용으로 사용될 때 유용하다. 소스 데이터가 본 발명의 속성 통지 메카니즘(예를 들면, IPropertyChange 인터페이스)을 지원하지 않으면, oneWay로 지정된 대상 속성은 바인딩이 바인드타입으로 oneTime이 지정된 경우와 유사하게 갱신될 것이다.Once the
(본 명세서에서 이하 갱신타입(264)이라 칭할) 바인딩 속성 중 다른 하나는 바인드타입(262)을 twoWay으로 지정한 경우의 갱신 타입을 정의한다. 통상적으로, twoWay 바인딩은 대상 속성에서의 변경을 듣고 이들 변경을 소스 데이터 값으로 돌려보낸다. 이러한 과정을 소스의 갱신이라 칭한다. 정상적으로, 대상 속성이 변경될 때마다 갱신하는 것이 바람직하다. 그러나, 특정 상황에서는, 모든 키를 타이핑한 후마다 업데이트하는 것은 사이클을 낭비하고 사용자에게 타이핑 오류 등을 수정할 기회를 주지 않는다. 갱신타입(264)은 사용자가 갱신이 일어나야하는 때를 지정하도록 한다. 일 실시예에서, 갱신타입(264)은 Immediate, OnLostFocus, 및 Explicit를 지정할 수 있다. Immediate 지정은 바인딩 엔진에게 대상 속성에 모든 변경이 일어난 이후마다 소스 데이터 값을 갱신하라는 신호를 보낼 것이다. OnLostFocus 지정은 바인딩 엔진에게 대상 엘리먼트가 키보드 포커스를 잃어버린 이후에 소스 데이터 값을 갱신하라는 신호를 보낼 것이다. Explicit 지정은 바인딩 엔진에게 애플리케이션이 명시적으로 갱신을 요청할 때만 소스 데이터 값을 갱신하라는 신호를 보낼 것이다. 통상적으로, 이 명시적인 요청은 메소드를 통해 수행된다. 이러한 메소드는 갱신타입(264)의 임의의 설정으로 호출될 수 있지만, 이 메소드는 갱신타입이 Explicit로 설정되었을 때 유용하다. 한 예시적인 메소드가 이하에 나타난다:Another of the binding attributes (hereinafter referred to as
Binding.GetBinding(myElement, myProperty).Update();Binding.GetBinding (myElement, myProperty) .Update ();
(본 명세서에서 이하 소스(266)라 칭할) 바인딩 속성 중 다른 하나는 바인딩을 위한 소스 데이터 아이템을 식별한다. 간단히 말하면, 도 4에 도시되고 이에 관련하여 기술된 바와 같이, 소스(266)는 프로그램적으로 또는 마크업으로 설정될 수 있다. 프로그램적으로는, 개발자는 바인딩이 소스 데이터 아이템으로 사용해야하는 객체에 객체 참조(objectref)를 제공한다. 간단히 말하면, 도 4에 관련하여 상세히 기술된 바와 같이, 마크업에서는, 소스 속성을 설정하는 다양한 메소드가 있다.The other of the binding attributes (hereafter referred to as
(본 명세서에서 이하 변환자(268)라 칭할) 바인딩 속성 중의 다른 하나는 클 래스 참조를 수용한다. 클래스 참조는 <Namespace>.<Class>, <Assembly>를 이용하여 지정될 수 있다. 지정된 클래스 참조는 바인딩 엔진(224)에 의해 호출되어 소스 데이터를 대상 속성에 의해 수용되는 포맷으로 변환한다. 도 2의 변환(244)에 나타나듯이, 클래스 참조 내의 메소드는 이러한 변환을 호출한다. 클래스 참조는 대상 속성을 소스 데이터 값에 의해 수용되는 포맷으로 변환하는 역변환(도시되지 않음)도 지정할 수 있다. 변환(244)은 UI 의미를 제공하거나 주문형 변환기일 수 있다.The other of the binding attributes (hereinafter referred to as
(본 명세서에서 이하 컬쳐(culture)(270)라 칭할) 바인딩 속성 중 다른 하나는 소스 데이터 값을 변환한 이후/이전에 소스 데이터 값이 처리되야하는 방식을 정의한다. 컬쳐(270)는 변환자(268)에 관련하여 동작하여 개발자가 소스 데이터 값들을 변환하는 규칙을 지정하게 한다. 예를 들면, 컬쳐는 숫자, 날짜, 등에 대한 특정한 포맷을 지정할 수 있다. 일실시예에서, 컬쳐(270)는 타입 CultureInfo의 값을 수용한다. 개발자는 변환을 구현할 때 컬쳐(270)에 의해 지정된 규칙을 이용하는 옵션(option)을 가진다.The other of the binding attributes (hereinafter referred to as
(본 명세서에서 이하 바인드플래그(bindflag)(272)라 칭할) 바인딩 속성 중 다른 하나는 데이터를 전송하라는 신호를 보내는 이벤트를 수신하는 메카니즘을 제공한다. 상술된 데이터 바인딩에 대한 방법이 비동기식이기 때문에, 바인드플래그(272)는 개발자가 대상이 새로운 값으로 갱신되었을 때를 알 수 있도록 한다. 이러한 메카니즘을 사용하기 위하여, 바인드플래그(272)는 "NotifyOnTransfer"로 설정된다. 그 다음 임의의 통상적인 방법을 이용하여 이벤트용 핸들러를 등록한다. 이러한 메카니즘의 하나의 예시적인 사용은 다음과 같다:The other of the binding attributes (hereinafter referred to as binddflag 272) provides a mechanism for receiving an event that signals to send data. Because the method for data binding described above is asynchronous, bind
위의 예제 코드에서 나타나듯이, 일단 OnDataTransfer 이벤트가 트리거(trigger)되었다면, 개발자는 동적인 속성이 갱신되었다는 것을 알게 된다. 그러므로, 개발자는 프로세싱을 더 하기 위하여 대상 값을 이용할 수 있다.As the example code above shows, once the OnDataTransfer event is triggered, the developer knows that the dynamic property has been updated. Therefore, the developer can use the target value for further processing.
도 3은 본 발명의 일 실시예에 따른 바인딩 메카니즘을 도시하는 논리적 흐름도이다. 개관으로, 바인딩 메카니즘은 바인딩을 설정하는 동작(action)을 수행하고(블럭 302-306) 그 다음 바인딩에서 지정된 대상 속성 또는 소스 데이터 값의 변경에 관한 동작(블럭 310-338)을 수행한다. 프로세싱은 블럭(302)에서 계속된다.3 is a logical flow diagram illustrating a binding mechanism in accordance with one embodiment of the present invention. In overview, the binding mechanism performs an action to set the binding (blocks 302-306) and then performs an action (blocks 310-338) on the change of the target attribute or source data value specified in the binding. Processing continues at
블럭(302)에서, 바인딩 객체는 생성 중에 지정된 인수(argument)들을 기반으로 생성된다. 간단히 말하면, 바인딩 객체(252)에 대한 각각의 속성(즉, 도 2에 도시된 속성(260-272))은 생성 중에 인수로 지정될 수 있다. 바인딩은 마크업을 통해, 프로그램적으로, 등으로 생성될 수 있다. 도 4는 바인딩을 생성하고 속성(260-272)을 지정하는 예시적인 구문을 나타낸다. 각각의 생성하는 방식은 소스 데이터 아이템, 소스 데이터 아이템의 데이터 값의 경로, 대상 UI 엘리먼트, 및 UI 엘리먼트의 대상 동적 속성을 지정한다. 본 블럭도에서 도시되지는 않았지만, 바인딩 객체의 속성들은 또한 애플리케이션 프로그래밍 인터페이스(application programming interface: API)의 이용을 통해서와 같이, 런타임 중에 동적으로 수정될 수 있다. 프로세싱은 블럭(306)으로 진행된다.At
블럭 304에서, 바인딩이 활성화된다. 일 실시예에서, 일단 바인딩 엔진이, 소스 객체가 존재하고, 대상 엘리먼트가 디스플레이될 준비가 되었다는 것 등과 같이, 바인딩에 충분한 환경이 있다는 것을 통지하면 바인딩은 자동적으로 활성화 될 수 있다. 바인딩 엔진은 바인딩의 활성화를 인식하는 것을 담당한다. 프로세싱은 블럭(304)에서 계속된다.At
블럭(306)에서, 지정된 소스 속성의 값이 발견된다. 일 실시예에서, 리플렉션을 이용하여 그 값을 찾는다. 리플렉션은 호출자가 요청된 객체에 대한 정보를 얻도록 하는 일반적인 메카니즘이다. 이 정보는 지원되는 객체, 공개 속성 등을 포함한다. 다른 실시예에서는, 데이터 아이템이 집합체일 때, 바인딩 엔진은 현재 레코드를 사용할지 데이터 객체(집합체) 자체를 사용할지를 결정하는 복수의 발견적 학습법(heuristics)을 수행한다. 제1 발견적 학습법은 바인딩이 속성 또는 색인자를 참조할 때 적용된다. 이러한 상황에서, 집합체 객체의 대응하는 속성 또는 색인자는 이러한 속성 또는 색인자가 존재할 때 사용된다. 대안으로, 집합체의 현재 레코드는 데이터 아이템으로 사용된다. 다른 발견적 학습법은 어떠한 속성 또는 색인자도 존재하지 않을 때 적용된다. 이러한 상황에서, 집합체 객체는 집합체 객체가 유효하는한 대상 속성에 이용된다. 그렇지 않으면, 현재 레코드가 이용된다. 블럭(308)으로 진행하기 전에, 바인딩이 변환을 지정하면 변환이 그 값에 적용된다(블럭 307). 변환의 적용은 블럭(316)에 관련하여 이하에 상세히 기술된다. 프로세싱은 블럭(308)에서 계속된다.At
블럭(308)에서, 발견되었던 값이 대상 속성에 할당된다. 일실시예에서, 속성들의 계층구조를 유지하는 것을 담당하는 속성 엔진이 값을 할당할 수 있다. 다른 실시예에서는, 바인딩의 생성 중에 지정된 변환이 호출되어 대상 속성에 값을 할당하기 이전에 값을 변환할 수 있다. 더 세밀하게는, 속성 엔진은 속성이 새로운 값을 가진다고 표시할 수 있다. 일단 블럭(302-208)이 수행되었으면, 바인딩 엔진은 필요한 대상 속성 및 소스 데이터 값들을 갱신할 준비를 한다. 일반적으로, 바인딩 메카니즘은 비동기식이다.At
그러므로, 블럭(308)로부터, 2개의 비동기식 경로를 통하여 프로세싱은 계속된다. 제1 경로(블럭 310-318)는 대상 속성의 갱신과 관련되고 제2 경로(블럭 330-338)는 소스 데이터 값의 갱신과 관련된다. 이들 경로 각각은 이하 기술된다. 우선, 대상 속성을 갱신하는 것을 담당하는 경로가 논의된다.Therefore, from
결정 블럭(310)에서, 바인딩 엔진은 소스 데이터 값 및 대상 속성과 관련되는 바인딩이 바인드타입을 oneTime으로 지정하였는지 여부를 결정한다. 바인드타 입이 oneTime이라면, 이 바인딩에 대한 프로세싱이 완료되고 종료된다. 본 기술 분야에서 숙련된 기술을 가진 자라면, 바인드타입이 oneTime인 경우, 바인딩 엔진은 소스 속성 변경 이벤트를 경청하지 않는다는 것을 알 것이다. 그러므로, 실제 실행에서, 바인딩 엔진 내의 로직은 블럭(310)에서 도시되듯이 반드시 검사를 수행하지는 않는다. 게다가, 데이터 아이템이 IPropertyChange를 구현하지 않는다면, 프로세싱은 완료된다. 그러나, 바인드타입이 oneTime이 아니라면, 프로세싱은 블럭(312)에서 계속된다.At
블럭(312)에서, 바인딩 엔진은 바인딩에 관련된 통지를 경청한다. 데이터바인딩이 대상을 소스 데이터 값으로 직접적으로 갱신하지 않기 때문에, 본 발명은 통지 메카니즘을 구현한다. 속성 변경 통지 및 집합체 뷰 "CurrentChanged" 통지 등과 같은, 통지 메카니즘은 본 기술에서 알려져 있고 장황하게 논의될 필요는 없다. 데이터 값 변경, 페이지 탐색, 종료, 데이터 집합체에서 관심있는 레코드의 변경 등과 같이, 여러 동작들이 통지를 일으킨다. 본 발명이 데이터 집합체에서 관심있는 레코드의 변경시에 갱신을 트리거하기 때문에, 본 발명은 사용자 인터페이스와 로직을 더 분리하는 편리한 메카니즘을 제공한다. 예를 들면, 본 발명에 따라서, 개발자는 데이터 집합체에서 관심있는 다음 레코드를 변경하는 방법을 지정하도록 로직에 코드를 작성하는 것만이 필요하다. 일단 변경이 일어나면, 본 발명에 따라서, 바인딩 엔진은 이미 지정된 바인딩에 따라 사용자 인터페이스를 갱신할 것이다. 전술했듯이, 사용자 인터페이스와 로직의 이러한 분리는 사용자 인터페이스와 로직이 상호 작용할 때보다 더 강력하고 더 쉽게 유지되는 애플리케이션 을 제공한다.At
이하 코드는 통지 메카니즘의 하나의 예시적인 구현이다. 이하 작성된 예시적인 코드가 C#으로 작성되었지만, 본 기술 분야에서 숙련된 기술을 가진 자는 다양한 언어 및 구문이 통지 메카니즘을 구현하는 데에 사용될 수 있다는 것을 알 것이다. 임의의 이러한 구현에서, 각각의 데이터 아이템에 의해 사용될 인터페이스가 정의된다. 각각의 데이터 아이템은 동적인 갱신을 구현하기 위하여 이러한 인터페이스를 상속한다.The following code is one exemplary implementation of the notification mechanism. Although the example code written below is written in C #, one skilled in the art will appreciate that various languages and syntaxes may be used to implement the notification mechanism. In any such implementation, an interface to be used by each data item is defined. Each data item inherits this interface to implement dynamic updates.
다음은, 이벤트 핸들러 및 이 핸들러의 인수가 정의된다.Next, event handlers and their arguments are defined.
클래스 PropertyChangeEventArgs는 스트링 타입을 가지는 PropertyName이라고 명명된 하나의 읽기 전용 속성을 포함한다. PropertyName 속성은 변경된 속성의 이름을 포함한다. 그 다음 각각의 소스 데이터 아이템은 그것의 속성 중 하나가 변경될 때마다 PropertyChanged 대리자를 호출함으로써 이러한 인터페이스를 구현한다. 이하는 통지 메카니즘에 대한 실시예에 따라서 소스 객체(예를 들면, 데 이터 아이템(232))를 구현하는 예시적인 예제이다.Class PropertyChangeEventArgs contains a single read-only property named PropertyName with a string type. PropertyName property contains the name of the property that has changed. Each source data item then implements this interface by calling the PropertyChanged delegate whenever one of its properties changes. The following is an illustrative example of implementing a source object (eg, data item 232) in accordance with an embodiment for a notification mechanism.
위의 예시적인 코드에서 나타나듯이, 'foo'속성에 대한 'set' 메소드는 새로운 값이 예전의 값과 다른지 판정한다. 값들이 다르면, 핸들러가 호출된다. 리플렉션을 수행하여 PropertyInfo를 획득한다. 더 상세히는, 일단 속성의 타입이 리플렉션을 통하여 얻어졌으면 바인딩 엔진은 그 속성의 타입을 캐슁(caching)할 수 있다. 이와 같이, 리플렉션은 한번만 수행되는 것이나, 속성에 대하여 통지를 수신할 때마다 수행되는 것은 아니다. 다른 상세한 예에서, 데이터 아이템의 데이터 값 각각으로의 모든 바인딩이 갱신되어야 할 것으로 신호를 보내기 위해 인수에서 빈 스트링을 통과시킬 수 있다. 이는 소스 객체가 어느 속성이 변경되었고 각각의 바인딩이 갱신되고자 하는지가 확실하지 않을 때 일어날 수 있다. 일단 바인딩 엔진이 데이터 소스 값이 변경되었다는 통지를 수신하면, 프로세싱은 판정 블럭(314)에서 계속된다.As the example code above shows, the 'set' method for the 'foo' attribute determines if the new value is different from the old one. If the values are different, the handler is called. Perform reflection to obtain PropertyInfo. More specifically, once the type of an attribute is obtained through reflection, the binding engine can cache the type of the attribute. As such, reflection is performed only once, but not every time a notification is received for an attribute. In another detailed example, an empty string can be passed in an argument to signal that all bindings to each data value of a data item should be updated. This can happen when the source object is not sure which attributes have changed and each binding is going to be updated. Once the binding engine receives the notification that the data source value has changed, processing continues at
판정 블럭(314)에서, 변경된 소스 데이터 값에 관련된 바인딩이 그 바인딩에 대한 변환을 지정하는지 여부에 대한 판정이 이루어진다. 바인딩이 변환을 지정하지 않으면, 프로세싱은 블럭(318)에서 계속된다. 그러나, 바인딩이 변환을 지정하면, 프로세싱은 블럭(316)에서 계속된다.At
블럭 316에서, 바인딩에서 지정된 변환이 수행된다. 일 실시예에서, 변환자(268)는 이하 기술된 객체이다:At
위의 인터페이스에 대하여, o는 소스 값을 나타내고, dp는 대상 동적 속성을 나타내며, c는 변환 중에 사용된 컬쳐를 나타낸다. Transform() 메소드는 소스 값 o를 dp 타입의 동적 속성에 할당하기에 적절한 객체로 변환한다. Transform() 메소드는 바인딩의 소스 데이터 값을 대상 속성에게 전달할 때 호출된다. Transform() 메소드가 널(null)값을 리턴하면, 바인딩 엔진에 데이터 값의 전달을 중지하라는 신호가 보내어진다.For the above interface, o represents the source value, dp represents the target dynamic attribute, and c represents the culture used during the conversion. The Transform () method transforms the source value o into an object suitable for assignment to dynamic properties of type dp. The Transform () method is called when passing the binding's source data value to the target property. If the Transform () method returns null, the binding engine is signaled to stop passing data values.
변환자는 또한 바인딩에서 지정된 관련된 소스 데이터 값에 기반하여 폭, 높이, 폰트, 위치좌표(x,y) 등과 같은 UI 다른 속성들을 제어하는 데에 사용될 수 있 다. 변환자는 몇몇의 방법으로 데이터를 보여주기 위하여 데이터 값에 대한 로직을 수행할 수 있는 기능을 제공한다. 더 상세히는, 바인딩에서 지정된 변환 중에 컬쳐가 적용될 수 있다. 프로세싱은 블럭(318)에서 계속된다.Translators can also be used to control other UI properties such as width, height, font, position coordinates (x, y), and so on, based on the associated source data values specified in the binding. Transformers provide the ability to perform logic on data values to present data in several ways. More specifically, the culture can be applied during the transformation specified in the binding. Processing continues at
블럭(318)에서, 대상 속성이 갱신된다. 일실시예에서, 속성 엔진은 대상 속성에 값을 할당한다. 또한, 대상 속성은 새로운 값을 갖는 것으로 표시될 수 있다. 그 다음 프로세싱은 블럭(312)으로 진행하여 그 바인딩과 관련된 다음 속성 변경 통지를 경청한다. 일단 애플리케이션이 끝나거나 바인딩이 다른 방식으로 종료되면, 프로세싱은 종료된다.At
상술한 바와 같이, 블럭(308)으로부터, 프로세싱은 제2 경로를 통해 계속될 수 있다. 그러므로, 블럭(308)으로부터, 프로세싱은 판정 블럭(330)에서 계속된다. 블럭(310)에 관련하여 상술한 바와 같이, 바인딩 엔진 내의 로직은 판정 블럭(310) 중에 바인드타입의 검사를 반드시 수행하지 않을 수 있으며, 오히려, 바인딩 엔진이 바인딩이 생성되었을 때의 통지를 경청하도록 경청하지 않았기 때문에, 프로세스는 제2 경로를 통하여 진행(flow)되지 않는다. 그러나, 그 흐름을 기술하는 데에 있어서 명확함을 위하여, 바인드타입을 반영하는 판정 블럭이 도시된다. 그러므로, 판정 블럭(330)에서, 바인드타입이 twoWay로 지정된 바인딩인지 여부의 판정이 이루어진다. 전술한 바와 같이, twoWay는 대상 속성의 변경을 소스 데이터 값에 전달할 수 있도록 하게 한다. 바인딩이 바인드타입으로 twoWay를 지정하지 않는다면, 프로세싱은 종료된다. 그러나, 바인딩이 바인드타입으로 twoWay를 지정한다면, 프로세싱은 블럭(332)에서 계속된다.
As discussed above, from
블럭(332)에서, 바인딩 엔진은 소스 데이터 값으로의 갱신을 트리거하는 특정 동작을 인식할 것이다. 일단 트리거가 일어나면, 프로세싱은 판정 블럭(334)에서 계속된다.At
판정 블럭(334)에서, 바인딩이 그 바인딩에 대한 역변환을 지정할지 여부의 판정이 이루어진다. 바인딩이 역변환을 지정하지 않는다면, 프로세싱은 블럭(338)에서 계속된다. 그러나, 바인딩이 역변환을 지정한다면, 프로세싱은 블럭(336)에서 계속된다.At
블럭(336)에서, 역변환은 소스 속성에 적용된다. 일실시예에서, 역변환은 이하에 기술되는 객체이다.In
위의 인터페이스에서, o는 소스값을 나타내고, c는 변환 중에 사용되는 컬쳐를 나타내며, pinfo는 대상 속성의 PropertyInfo를 나타낸다. InverseTransform() 메소드는 소스 값 o를 info 타입의 속성에 할당하기에 적절한 객체로 변환한다. 이러한 메소드는 바인딩의 대상 값을 소스로 전달할 때에 호출된다. InverserTransform() 메소드가 널 값을 리턴하면, 바인딩 엔진은 값을 전달하지 않는다. 일단 InverseTransform이 수행되면, 프로세싱은 블럭(338)에서 계속된다.In the above interface, o represents the source value, c represents the culture used during conversion, and pinfo represents the PropertyInfo of the target attribute. The InverseTransform () method transforms the source value o into an object suitable for assigning to an attribute of type info. These methods are called when passing the target value of the binding to the source. If the InverserTransform () method returns a null value, the binding engine does not pass a value. Once the InverseTransform is performed, processing continues at
블럭(338)에서, 소스 속성은 갱신타입에 따라서 갱신된다. 상술한 바와 같 이, 갱신 타입은 즉시(immediate), 온 로스 오브 포커스(on loss of focus), 명시적(explicit) 등일 수 있다. 일단 소스 속성이 갱신되면, 프로세싱은 종료된다.At
도 4는 바인딩을 생성하는 몇몇의 예시적인 수단을 도시한다. 생성 수단(400-410)은 마크업을 통하여 바인딩을 생성한다. 생성 수단(410)은 코드를 통한 바인딩을 생성한다. 도 4에 도시되는 예시적인 수단은 모든 것을 망라한 것이 아니다. 다른 수단(구문)이 본 발명의 범위에 벗어나지 않고 이용될 수 있다.4 illustrates some example means for creating a binding. The generating means 400-410 generate the binding through markup. The generating means 410 generates a binding through the code. The example means shown in FIG. 4 is not exhaustive. Other means (syntax) can be used without departing from the scope of the present invention.
생성 수단(400)은 엘리먼트(424)에 대한 (본 명세서에서 이하 DataContext(422)라 칭할) DataContext 이름/값 쌍 및 (본 명세서에서 이하 Id(420)라 칭할) Id 이름/값 쌍을 포함한다. 생성 수단(400)이 DataContext(422)를 포함하기 때문에, Id(420)가 필요하지는 않는다. Id(420)는 마크업의 ElementSource 또는 코드의 IdObjectReg를 사용하는 것과 같이, 명시적인 소스를 참조하는 것이 바람직할 때에 필요하다. 이들 사용은 둘다 이하 기술된다. DataContext(422)는 엘리먼트(예를 들면, 엘리먼트(424))에 대해 정의되는 동적 속성이다. DataContext(422)에 관련되는 값은 디폴트 소스 데이터 아이템을 나타내고 상속 가능한 속성이다. 바인딩 엔진은 DataContext(422)를 쿼리하고 엘리먼트(424)와 상속 엘리먼트(예를 들면, button 엘리먼트(426))의 바인딩을 생성할 때 DataContext(422)를 이용한다. 바인딩 엔진은 또한 DataContext(422)의 변경을 경청하여 이에 따라 갱신을 트리거한다. 그러므로, 요구사항은 아니지만, DataContext(422)는 일반적인 데이터 아이템에 바인딩되는 모든 속성에 대한 범위를 확립하는 편리한 메카니즘을 제공한다. 상속 엘리먼트는, 부모 엘리먼트의 DataContext(422)보다 우선할 자신의 고유한 DataContext를 가질 수 있다. 생성 수단(402)에 관하여 이하 기술할 바와 같이, 바인딩은 널 값이 아닌 소스를 제공함으로써, DataContext(422)를 오버라이딩(override)할 수 있다.The generating means 400 comprises a DataContext name / value pair (hereinafter referred to as DataContext 422) for the
대상 속성(예를 들면, Button.Text(428))을 가지는 button 엘리먼트(426)가 도시된다. 본 발명에 따라, "Data: Bind"를 만났을 때, 바인딩 엔진은 바인딩이 지정되고 있다는 것을 알게된다. 수반되는 이름/값 쌍은, 도 2에 지정되는 바인딩 속성(260-272)을 설정한다. 본 기술 분야에서 숙련된 기술을 가진 자라면 바인딩에 신호를 보내는 "Data: Bind"라는 용어는 임의의 용어이고 임의의 개수의 용어들이 본 발명을 벗어나지 않고 사용되고 있을 수 있다는 것을 알 것이다. 생성 수단(400)은 방대한 마크업 포맷을 나타낸다.A
생성 수단(402)은 조밀한 마크업 포맷을 나타낸다. UI 속성(예를 들면, Button Text)은 더 조밀한 방식으로 나타난다. 다시, "Data: Bind"는 바인딩 엔진에게 수반되는 것이 바인딩이라고 신호를 보내는 데 이용된다. 또한, 소정의 속성(260-272)에 대응하는 Data:Bind를 따르는 이름/값 쌍들은 도 2의 바인딩 객체(250)에 대해 전술하였다. 예를 들면, (본 명세서에서 이하 ElementSource(434)라 칭할) ElementSource 이름/값 쌍은 소스(266)와 대응한다.The generating means 402 represents a dense markup format. UI properties (eg Button Text) appear in a more compact way. Again, "Data: Bind" is used to signal the binding engine that the binding is binding. In addition, the name / value pairs following Data: Bind corresponding to certain attributes 260-272 have been described above with respect to
마크업에는, 소스 속성을 설정하는 두 가지 메소드, ElementSource 및 DataSource, 가 있다. 이들 두 가지가 모두 사용되지 않는다면, 소스에 대한 디폴트 값은 널이며 이는 생성 중에 바인딩 엔진에게 엘리먼트의 DataContext 속성의 값을 얻고 그 값을 소스 객체로서 사용하라는 신호를 보낸다. Markup has two methods for setting source attributes: ElementSource and DataSource. If neither of these are used, the default value for the source is null, which signals the binding engine to get the value of the element's DataContext attribute during creation and use that value as the source object.
생성 수단(예를 들면, 생성 수단(402))이 ElementSource를 지정하면, 바인딩 엔진은 ID가 ElementSource 속성에 의해 지정된 엘리먼트를 찾는다. 그 다음 그러한 엘리먼트의 DataContext는 소스 객체로 이용된다. Parent/Parent 및 Previous/Previous와 같은, 관련된 경로 이름은 데이터 소스를 지정하는 데에 이용될 수 있다. 바인딩 엔진이 /Parent를 만나면, 이 엔진은 객체 계층의 관점에서 현재 엘리먼트의 엘리먼트 부모를 찾는다. 예를 들면, 엘리먼트가 고객 주문이라면, /Parent 지정은 바인딩 엔진에게 현재 주문에 대한 고객에 해당하는 엘리먼트를 찾으라는 신호를 보낼 수 있다. /Previous 지정은 내부의 리피터(repeater)의 범위에서 외부 리피터로부터 값을 사용하는 것이 바람직한 중첩된 리피터 경우에서 유용하다. /Previous 지정은 바인딩 엔진에게 리피터 아래의 현재 엘리먼트 이전의 엘리먼트를 찾으라는 신호를 보낸다. /Previous 지정은 선 그래프 등에서와 같이, 현재 아이템 이외에 현재 n개의 아이템을 엑세스하는 것이 바람직할 때 유용하다. 상속되는 /Previous 및 /Parent는 본 발명에 따라서 이용될 수 있다.If the generating means (e.g., generating means 402) specifies an ElementSource, the binding engine looks for the element whose ID is specified by the ElementSource attribute. Then the DataContext of that element is used as the source object. Related path names, such as Parent / Parent and Previous / Previous, can be used to specify the data source. When the binding engine encounters / Parent, it looks for the element parent of the current element in terms of the object hierarchy. For example, if the element is a customer order, the / Parent specification can signal the binding engine to find the element corresponding to the customer for the current order. The / Previous specification is useful in nested repeater cases where it is desirable to use a value from an external repeater in the range of an internal repeater. Specifying / Previous signals the binding engine to find the element before the current element under the repeater. The / Previous designation is useful when it is desirable to access the current n items in addition to the current item, such as in a line graph. Inherited / Previous and / Parent can be used in accordance with the present invention.
다른 실시예에서, 마크업은 데이터소스를 지정할 수 있다. 데이터소스가 지정되면, 바인딩 엔진은 자원의 리소스 id를 받는다. 자원이 데이터 속성을 드러내면, 바인딩 엔진은 바인딩의 소스를 데이터소스 자원의 데이터 속성에 의해 리턴되는 객체로 설정한다. 그렇지 않으면, 바인딩 엔진은 바인딩의 소스를 자원 객체 자체로 설정할 것이다.In other embodiments, the markup may specify a data source. If a datasource is specified, the binding engine receives the resource id of the resource. If the resource exposes a data attribute, the binding engine sets the source of the binding to the object returned by the data attribute of the data source resource. Otherwise, the binding engine will set the source of the binding to the resource object itself.
본 기술 분야에서 숙련된 기술을 가진 자라면 속성(260-272)이 마크업 언어를 이용하여 표현될 수 있는 다양한 방법이 있다는 것을 알 것이고, 그러므로 이들 다른 속성들 각각이 마크업 언어를 이용하여 표현될 수 있는 방식은 본 명세서에서 더 상세히 설명되지 않는다.Those skilled in the art will appreciate that there are a variety of ways in which attributes 260-272 can be expressed using markup languages, and therefore, each of these different attributes can be represented using markup languages. The manner in which this may be done is not described in more detail herein.
다음의 3개의 생성 수단(404-410)은 본 발명이 바인딩할 수 있는 유형의 아이템에서 예시적인 예제들을 제공한다. 생성 수단(404)은 부속성 및 색인자로의 바인딩의 지원을 예시한다. 생성 수단(404)은 C#으로 작성된 바인딩 di.a.b[3].c로 대응하는데, 여기서 di는 관련된 데이터 아이템이다. 데이터 아이템, di.a를 구현하는 클래스, di.a.b를 구현하는 클래스 및 di.a.b[3].c를 구현하는 클래스는 모두 본 발명의 통지 메카니즘을 지원하고(예를 들면, IPropertyChange) 그들의 속성이 변경되는 때를 통지하는 한, 생성 수단(404)를 이용하여 지정된 바인딩은 바인딩 엔진에게 소스 데이터 값의 변경을 반영하도록 바인딩된 속성(예를 들면, 대상 속성)을 자동 갱신하도록 할 것이다. The following three generating means 404-410 provide illustrative examples in the type of item to which the present invention can bind. The generating means 404 illustrates the support of attachment and binding to the index. The generating means 404 corresponds with the binding di.a.b [3] .c written in C #, where di is the associated data item. Data items, classes implementing di.a, classes implementing di.ab, and classes implementing di.ab [3] .c all support the notification mechanism of the present invention (eg, IPropertyChange) and their properties. The binding specified using the generating means 404 will cause the binding engine to automatically update the bound attribute (eg, the target attribute) to reflect the change in the source data value, as long as it is notified when this change is made.
생성 수단(406)은 데이터 집합체로의 바인딩의 지원을 도시한다. 바인딩 엔진은 자동적으로 각 레벨(여기에서 a, b, 및 c는 서로 다른 레벨을 나타낸다)에서 집합체의 현재 레코드를 이용한다. 예를 들면, di.a가 타입 IDataCollection을 가지면, 바인딩은 집합체의 현재 레코드를 이용하여 "b"속성을 페치한다. 그러므로, 바인딩 엔진은 현재 레코드가 변경될 때마다 자동적으로 데이터 집합체와 관련된 값들을 갱신한다.The generating means 406 shows the support of the binding to the data aggregate. The binding engine automatically uses the current record of the aggregate at each level, where a, b, and c represent different levels. For example, if di.a has a type IDataCollection, the binding fetches the "b" attribute using the current record of the collection. Therefore, the binding engine automatically updates the values associated with the data collection whenever the current record changes.
생성 수단(408)은 XML 노드로의 바인딩의 지원을 도시한다. 값으로의 경로(260)가 도 4에 도시된, "/Customer/Order[@OrderID=10]/Amount)"와 같은, 엑스패스 표현(xpath expression)을 이용하여 제공된다. 생성 수단(410)은 ADO 데이터 테이블로의 바인딩의 지원을 도시한다. 이 구현에서, 값으로의 경로(260)는 도 4에 도시된, "OrderID"와 같은, 특정 열에 대한 필드 이름으로 제공된다.The generating means 408 shows the support of the binding to the XML node. A
생성 수단(410)은 프로그램적으로 바인딩들을 생성한다. 개발자는 바인딩이 소스 데이터 아이템으로서 사용해야되는 객체에 객체참조를 제공한다. 생성 수단(412)에 도시된 프로그램문은 생성 수단(410)에 의해 도시된 것과 동일한 행위를 하는 바인딩을 생성한다. SetBinding 메소드는 프로그래머가 상술한 바인딩 속성 중 임의의 것을 지정할 수 있게 하는 복수의 보다 복잡한 변형들을 가진다. 위의 간단한 예제는 소스 객체로서 button의 DataContext를 사용한다. 이하 프로그램문은 소스로서 (런타임에 알려진) 특정 객체를 이용하는 oneWay 바인딩을 생성한다.The generating means 410 generates the bindings programmatically. The developer provides an object reference to an object whose binding should be used as a source data item. The program statement shown in the generating means 412 generates a binding that performs the same action as that shown by the generating means 410. The SetBinding method has a number of more complex variations that allow the programmer to specify any of the binding attributes described above. The simple example above uses the button's DataContext as the source object. The following program statement creates a oneWay binding that uses a specific object (known at runtime) as its source.
이하 코드 예제는 본 발명의 바인딩 메카니즘을 통하여 데이터에 대해 사용자 인터페이스 속성을 제어하는 하나의 구현을 나타낸다. 이러한 예에서, 데이터 값(예를 들면, myInteger) 및 UI 속성(예를 들면, TextContent)은 바인딩으로 활성 화된다. 또한, 변환(예를 들면, MyTransformer)이 이러한 바인딩에 지정된다.The following code example illustrates one implementation of controlling user interface attributes for data through the binding mechanism of the present invention. In this example, the data value (eg myInteger) and the UI property (eg TextContent) are activated with a binding. In addition, a transform (eg, MyTransformer) is assigned to this binding.
그러므로, 기술된 바와 같이, 본 발명은 사용자 인터페이스와 로직의 코딩에서의 변경이 분리될 수 있는 방식으로 소스 데이터 값을 대상 속성과 관련시키는 메카니즘을 제공한다. 그러므로, 본 발명은 개발자가 그들이 애플리케이션의 기초적인 로직의 수정 없이도 사용자 인터페이스를 쉽게 수정하고 강화할 수 있게 한다.Therefore, as described, the present invention provides a mechanism for associating source data values with target attributes in such a way that changes in coding of the user interface and logic can be separated. Therefore, the present invention allows developers to easily modify and enhance the user interface without modifying the basic logic of the application.
상기 명세서에서, 예제 및 데이터는 제작의 완전한 설명 및 본 발명의 구성물의 이용을 제공한다. 본 발명의 다양한 실시예가 본 발명의 사상 및 범위를 벗어나지 않고 이루어질 수 있기 때문에, 본 발명은 이하의 특허 청구 범위에 귀속한다.In the foregoing specification, examples and data provide a complete description of the fabrication and use of the constructs of the invention. Since various embodiments of the invention can be made without departing from the spirit and scope of the invention, the invention resides in the claims below.
Claims (38)
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
KR1020047010780A KR20060059335A (en) | 2004-07-09 | 2003-05-17 | System and method for controlling user interface properties with data |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
KR1020047010780A KR20060059335A (en) | 2004-07-09 | 2003-05-17 | System and method for controlling user interface properties with data |
Publications (1)
Publication Number | Publication Date |
---|---|
KR20060059335A true KR20060059335A (en) | 2006-06-01 |
Family
ID=37156541
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
KR1020047010780A KR20060059335A (en) | 2004-07-09 | 2003-05-17 | System and method for controlling user interface properties with data |
Country Status (1)
Country | Link |
---|---|
KR (1) | KR20060059335A (en) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2013078022A1 (en) * | 2011-11-21 | 2013-05-30 | Microsoft Corporation | Asynchronous data binding |
-
2003
- 2003-05-17 KR KR1020047010780A patent/KR20060059335A/en not_active Application Discontinuation
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2013078022A1 (en) * | 2011-11-21 | 2013-05-30 | Microsoft Corporation | Asynchronous data binding |
US8499122B2 (en) | 2011-11-21 | 2013-07-30 | Microsoft Corporation | Asynchronous data binding |
US8725949B2 (en) | 2011-11-21 | 2014-05-13 | Microsoft Corporation | Asynchronous data binding |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US7519969B2 (en) | System and method for controlling user interface properties with data | |
KR101331260B1 (en) | Metadata driven user interface | |
Nagel et al. | Professional c# 2005 | |
EP0811193B1 (en) | Graphical environment for managing and developing applications | |
US6854123B1 (en) | Method, system, and program for mapping standard application program interfaces (APIs) to user interface APIs | |
US6957439B1 (en) | Method, system, and program for mapping objects in different language formats | |
KR101377311B1 (en) | Integrating charts in documents | |
KR101130500B1 (en) | Mechanism for providing data driven command line output | |
US20090077091A1 (en) | System for development and hosting of network applications | |
US7765464B2 (en) | Method and system for dynamically assembling presentations of web pages | |
US20050188350A1 (en) | Data binding | |
KR101150059B1 (en) | Mechanism for providing extended functionality to command line instructions | |
US8667508B2 (en) | Method for providing stand-in objects | |
US7007266B1 (en) | Method and software system for modularizing software components for business transaction applications | |
JP5697661B2 (en) | Platform extensibility framework | |
US7860894B2 (en) | Template driven type and mode conversion | |
KR101130455B1 (en) | Mechanism for obtaining and applying constraints to constructs within an interactive environment | |
JPH01126736A (en) | Data processing system | |
US20050289450A1 (en) | User interface virtualization | |
US7506341B2 (en) | System and method for controlling user interface properties with data | |
AU2003239503B2 (en) | System and method for controlling user interface properties with data | |
KR20040097937A (en) | System and method for employing object-based pipelines | |
KR20060059335A (en) | System and method for controlling user interface properties with data | |
JP5010625B2 (en) | Recording medium and system storing program for controlling user interface property by data | |
Abrams et al. | User interface markup language (UIML) specification |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A201 | Request for examination | ||
E902 | Notification of reason for refusal | ||
E601 | Decision to refuse application |