XAML에서 매개 변수가있는 생성자 호출
WPF를 사용하는 동안 XAML 파일에 컨트롤을 추가하면 기본 생성자가 호출됩니다.
매개 변수화 된 생성자를 호출하는 방법이 있습니까?
.NET 4.0은 답에 도전하는 새로운 기능을 제공합니다.
<object ...>
<x:Arguments>
oneOrMoreObjectElements
</x:Arguments>
</object>
나는 내가 여기서 파티에 늦었다는 것을 알고 있지만 아무도 WPF 규칙을 실제로 다루지 않았기 때문에 나는 차임 할 것이라고 생각했다.
XAML 친화적 인 개체의 기본 원칙 중 하나는 기본 생성자와 함께 완전히 사용할 수 있어야한다는 것입니다. 즉, 기본이 아닌 생성자를 사용할 때만 액세스 할 수있는 동작은 없습니다. XAML의 선언적 특성에 맞게 개체 매개 변수는 속성 설정기를 통해 지정됩니다. XAML에서 속성이 설정되는 순서가 중요하지 않아야한다는 규칙도 있습니다.
그러나 구현에 중요한 몇 가지 특별한 고려 사항이 있지만 관습과는 상충 될 수 있습니다.
- 개체를 사용하기 전에 설정 해야하는 속성이 하나 이상 있을 수 있습니다.
- 둘 이상의 속성은 서로 배타적 일 수 있습니다. 예를 들어, 이미지
StreamSource
와 둘 다 설정하는 것은 의미가 없습니다UriSource
. - 초기화 중에 만 속성이 설정 되도록 할 수 있습니다 .
- 하나의 속성이 다른 속성에 종속 될 수 있으며, 속성을 설정할 때 앞서 언급 한 순서 독립 규칙으로 인해 까다로울 수 있습니다.
이러한 경우를보다 쉽게 처리 할 수 있도록 ISupportInitialize
인터페이스가 제공됩니다. 객체가 XAML에서 읽고 생성 될 때 (즉, 구문 분석), 구현하는 객체 ISupportInitialize
는 특별히 처리됩니다.
- 기본 생성자가 호출됩니다.
BeginInit()
호출됩니다.- 속성은 XAML 선언에 표시된 순서대로 설정됩니다.
EndInit()
호출됩니다.
BeginInit()
및에 대한 호출을 추적 EndInit()
하면 특정 속성 설정 요구 사항을 포함하여 적용해야하는 모든 규칙을 처리 할 수 있습니다. 이것이 생성 매개 변수를 처리하는 방법입니다. 생성자 인수를 요구하지 않습니다.
참고 ISupportInitializeNotification
가산하여 상기 인터페이스를 확장도 제공되며, IsInitialized
속성 및 Initialized
이벤트. 확장 버전을 사용하는 것이 좋습니다.
아니요. XAML이 아닙니다 [WPF 사용시].
예, ObjectDataProvider
. 기본이 아닌 생성자를 호출 할 수 있습니다. 예를 들면 다음과 같습니다.
<Grid>
<Grid.Resources>
<ObjectDataProvider x:Key="myDataSource"
ObjectType="{x:Type local:Person}">
<ObjectDataProvider.ConstructorParameters>
<system:String>Joe</system:String>
</ObjectDataProvider.ConstructorParameters>
</ObjectDataProvider>
</Grid.Resources>
<Label Content="{Binding Source={StaticResource myDataSource}, Path=Name}"></Label>
</Grid>
Person이
public class Person
{
public Person(string Name)
{
this.Name = Name;
}
public string Name { get; set; }
}
불행히도 ConstructorParameters
. 여기에서 몇 가지 해결 방법을 참조 하십시오 .
ReferenceURL : https://stackoverflow.com/questions/1083159/calling-a-parameterized-constructor-from-xaml
'Development Tip' 카테고리의 다른 글
Android M에서 단일 요청으로 여러 권한을 확인하는 방법은 무엇입니까? (0) | 2020.12.15 |
---|---|
프로그래밍 방식으로 log4net 로깅 수준 변경 (0) | 2020.12.15 |
Enum.values () 대 EnumSet.allOf (). (0) | 2020.12.15 |
R : 루프 중단 (0) | 2020.12.15 |
선택 쿼리의 출력을 postgres의 하나의 어레이에 저장 (0) | 2020.12.15 |