2012-10-09 5 views
4

I가 다음과 같은 클래스만들기 바인딩 (WinRT)

ImageViewModel: INotifyPropertyChanged 
{ ... 
    String Url; 
} 

AdViewModel: INotifyPropertyChanged 
{ ... 
    ImageViewModel Image 
} 

AdViewModel이 perodicaly 이미지 속성 (애니메이션 광고)을 변경합니다.

나는 다음과 같은 XAML이있을 때 :

<Grid> 
    <Image Source="{Binding Image.Url}" 
      Width="{Binding Image.Width}" 
      Height="{Binding Image.Height}" /> 

을 예상 작품으로 AdViewModel의 모든 인스턴스에 그리드의 DataContext를 설정합니다. 하지만 다른 곳에서 사용하려면 C# 코드로 XAML을 만들어야합니다. 그리드를 만들고 자식으로 이미지를 추가하는 것은 쉽지만 바인딩을 만드는 방법은 무엇입니까?

+1

왜 C# 코드로 만들어야합니까? DataTemplate이 작동하지 않는 이유는 무엇입니까? 당신이하고자하는 일에 대한 더 많은 맥락은 당신을 올바른 대답으로 이끌어 줄 것입니다. –

+0

다른 앱에서 호출하고 RichTextBlock에 광고가 포함 된 구성 요소를 작성해야합니다. –

답변

1

의 라인을 따라 뭔가를하려고합니다. XAML을 UserControl로 만들어 파일 (Templates \ SkyScrapper.xaml)에 저장했습니다. 대신 C#에서 컨트롤을 만드는 그런 다음 바로

var _Path = @"Templates\SkyScrapper.xaml"; 
var _Folder = Windows.ApplicationModel.Package.Current.InstalledLocation; 
var _File = await _Folder.GetFileAsync(_Path); 
var _ReadThis = await Windows.Storage.FileIO.ReadTextAsync(_File); 

DependencyObject rootObject = XamlReader.Load(_ReadThis) as DependencyObject; 
var uc = (UserControl)rootObject; 

을 XAML 파일을로드하고 C#에서 바인딩을 만들 필요는 이제 없다 자사의 DataContext

uc.DataContext = ad; 

을 설정, 그들은 XAML에 정의되어 있습니다 파일.

8

내가 쉬운 방법을 발견

AdViewModel vm = new AdViewModel;  
Binding binding = new Binding 
{ 
    Path = new PropertyPath("Width"), 
    Source = vm.Image 
}; 
nameOfGridInXaml.SetBinding(Image.WidthProperty, binding);