在代码中创建绑定(WinRT)

4

我有以下几个类

ImageViewModel: INotifyPropertyChanged
{ ...
   String Url;
}

AdViewModel: INotifyPropertyChanged
{ ...
    ImageViewModel Image
}

AdViewModel定期更改Image属性(动画广告)。
当我有以下XAML时:
<Grid>
  <Image Source="{Binding Image.Url}"
           Width="{Binding Image.Width}"
           Height="{Binding Image.Height}" />

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


1
为什么需要使用C#代码创建它?DataTemplate不起作用吗?提供更多你要尝试做什么的上下文信息将有助于得出正确答案。 - Michael Brown
我需要编写一个组件,另一个应用程序将调用该组件并在RichTextBlock中包含具有广告的网格。 - Igor Kulman
2个回答

8
尝试类似以下方式:
AdViewModel vm = new AdViewModel;      
Binding binding = new Binding
{
    Path = new PropertyPath("Width"),
    Source = vm.Image
};
nameOfGridInXaml.SetBinding(Image.WidthProperty, binding);

1

我找到了一种更简单的方法。我将XAML创建为UserControl,并将其保存在文件中(Templates\SkyScrapper.xaml)。然后,我只需加载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;

并设置它的DataContext

uc.DataContext = ad;

现在无需在C#中创建绑定,它们在XAML文件中定义。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接