在代码中创建绑定(WinRT)

时间:2012-10-09 12:59:25

标签: c# xaml windows-8 windows-runtime

我有以下课程

ImageViewModel: INotifyPropertyChanged
{ ...
   String Url;
}

AdViewModel: INotifyPropertyChanged
{ ...
    ImageViewModel Image
}

AdViewModel perodicaly更改了Image属性(动画广告)。

当我有以下XAML时:

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

将Grids DataContext设置为AdViewModel的实例,一切都按预期工作。但我需要在C#代码中创建XAML以在其他地方使用它。创建网格并将图像作为其子项附加很容易,但如何创建绑定?

2 个答案:

答案 0 :(得分:8)

按照

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

答案 1 :(得分: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文件中定义的。