에서 XAML 파일의 인스턴스에 내용을 설정 :이 작업을 수행 클래스 뒤에 코드에서 XAML
내가 XAML에서 같은 일을 할 수있는 방법MyElement.Content = new XamlUserControlFile();
?
에서 XAML 파일의 인스턴스에 내용을 설정 :이 작업을 수행 클래스 뒤에 코드에서 XAML
내가 XAML에서 같은 일을 할 수있는 방법MyElement.Content = new XamlUserControlFile();
?
그것은 전적으로 분명하지만, 좀 더 정보의 부족이 아니다 ...
당신은 같은 것을 사용하는 경우 ...
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 등
가능성은 무한합니다 - 당신이 좀 더 관련 정보를 놓아야합니다.
아마 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="...">
바인딩 할 수 있습니다.
"MyElement"의 정의와 "XamlUserControlFile"의 내용에 대해 자세히 알려주십시오. –
ContentControl 또는 TreePanel ... Content 속성이있는 모든 것일 수 있습니다. – Craig
실제로 이것은 caliburn.micro와 같은 프레임 워크를 활용하는 것이 일반적입니다. 여러분은 여러분의 컨텐트를 몇몇 ViewModel 종류의 'Binding'으로 설정하고 프레임 워크가 뷰를 해결합니다. 프레임 워크를 사용하여 문제를 해결할 수 있다면 http://www.mindscapehq.com/blog/index.php/2012/01/12/caliburn-micro-part-1-getting-started/ –