2012-10-09 27 views
4

我有以下類創建綁定(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}" /> 

和格子的DataContext設置爲AdViewModel一切的實例按預期工作。但我需要在C#代碼中創建XAML以在其他地方使用它。創建一個Grid並將一個Image添加爲子項很容易,但是如何創建綁定?

+1

爲什麼你需要用C#代碼創建它?爲什麼DataTemplate不能工作?圍繞你想要做的更多背景將幫助你找到正確的答案。 –

+0

我需要編寫另一個應用程序將調用的組件,並將網格與廣告一起放入RichTextBlock –

回答

1

我發現了一個更簡單的方法線的東西。我將XAML創建爲UserControl,並將其保存在文件(Templates \ SkyScrapper.xaml)中。然後,而不是在C#創建控件只加載XAML文件

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; 

,並設置它的DataContext

uc.DataContext = ad; 

現在有沒有必要建立在C#中的綁定,他們在XAML中定義文件。

8

嘗試沿着

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