2013-04-12 2 views
1

에서 XAML 파일의 인스턴스에 내용을 설정 :이 작업을 수행 클래스 뒤에 코드에서 XAML

내가 XAML에서 같은 일을 할 수있는 방법
MyElement.Content = new XamlUserControlFile(); 

?

+0

"MyElement"의 정의와 "XamlUserControlFile"의 내용에 대해 자세히 알려주십시오. –

+0

ContentControl 또는 TreePanel ... Content 속성이있는 모든 것일 수 있습니다. – Craig

+0

실제로 이것은 caliburn.micro와 같은 프레임 워크를 활용하는 것이 일반적입니다. 여러분은 여러분의 컨텐트를 몇몇 ViewModel 종류의 'Binding'으로 설정하고 프레임 워크가 뷰를 해결합니다. 프레임 워크를 사용하여 문제를 해결할 수 있다면 http://www.mindscapehq.com/blog/index.php/2012/01/12/caliburn-micro-part-1-getting-started/ –

답변

1

그것은 전적으로 분명하지만, 좀 더 정보의 부족이 아니다 ...

당신은 같은 것을 사용하는 경우 ...

hostControl.Content = XamlReader.Load(YourXAML); 

또는 LoadComponent

내가 돈 ' XAML에는 '속기'가 있다고 생각하지 않습니다 (제가보고 싶다면 :).

1) 중 하나를 사용할 수 ...

Content="{x:Static my:YourStaticClass.XAMLProperty, Converter=...}" 
Content="{Binding Source={x:Static my:YourStaticClass.XAMLProperty}, Converter=...}" 
Content="{Binding ViewModelXAMLProperty}, Converter=...}" 

가 노출하는 속성에 바인딩하려면 당신이 거기에 넣어 싶습니다)로드 준비되어 Content 또는 내부 Control (.

당신이 원하는 형태로되도록 prepare해야합니다 (스트레이트 XAML은 작동하지 않지만 어떤 형태의로드).

다른 방법으로 Converter을 지정했습니다. 즉석에서 XAML을 변환 할 수 있습니다 (필요한 경우).

2) 또한 Load 뒤에서 코드에서 XAML 수 - 자원으로와를 넣어 -하거나 XAML에서 인스턴스화 일부 래퍼를 정의합니다.

그리고 그런 다음 사용 {StaticResource ...} 또는 DynamicResource 등

가능성은 무한합니다 - 당신이 좀 더 관련 정보를 놓아야합니다.

1

아마 UserControl이 포함 된 XAML이있는 ContentControl이 필요합니까?

ContentControl의 내용에는 제한이 있습니다 ( as you can see here). 내용은 Text (sporting ToString() 메서드) 또는 UIElement 파생 개체 여야합니다.

ContentControl에서 xaml과 컨트롤을 구분하는 일종의 UserControl을 간단하게 작성할 수 있습니다.

업데이트

caliburn.micro 같은 MVVM 프레임 워크를 활용하면 MVVM에 매우 가까이 붙어있게된다. ViewModels에서 ViewModels 만 참조하면됩니다. 코드 숨김을 완전히 없앨 수 있습니다.

다음
public class MyUserControlViewModel : PropertyChangedBase 
{ 
} 

당신은 매우 easyly 상기 화면 (뷰와 뷰 모델에 그것을 위해 바인딩을 가질 수

은 당신이 그것을 위해 어떤 뷰 모델이 다음

<UserControl x:Class="MyUserControlView" 
      ...> 
    <Grid Background="Green"> 
    </Grid> 
</UserControl> 

같은 UserControl이 있다고 가정하자) UserControl

public MyUserControlViewModel MyUserControlViewModel { get; set; } 

죄수를 통해 초기화하십시오. 같은 tructor를 포함하는 클래스

public ShellViewModel(MyUserControlViewModel viewModel) 
{ 
    this.MyUserControlViewModel = viewModel 
} 

에 주입 (포함하는 XAML에서) 바인딩 설정 : 이것은 당신이해야 할 모든 것입니다

<ContentControl Name="MyUserControlViewModel " /> 

는, 그만큼 쉽다.

caliburn.micro에는 "컨벤션 오버 컨벤션" 이 있으므로 뷰의 이름을 "... View"로 지정하고 ViewModels "... ViewModel"의 이름을 지정해야합니다. (하지만 자신 만의 규칙을 설정할 수 있습니다).

그리고,이 예에서 매우 중요한 : 당신이 위의 ContentControl을에서 볼 수 caliburn.micro가와 의지를 셋업 <x:Name="..."> 바인딩 할 수 있습니다.

관련 문제