我有以下课程
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以在其他地方使用它。创建网格并将图像作为其子项附加很容易,但如何创建绑定?
答案 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文件中定义的。