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}" />

并将 Grids DataContext 设置为 AdViewModel 的实例,一切都按预期工作。但我需要在 C# 代码中创建 XAML 才能在其他地方使用它。创建一个 Grid 并附加一个 Image 作为它的孩子很容易,但是如何创建绑定呢?

4

2 回答 2

8

尝试一些类似的东西

AdViewModel vm = new AdViewModel;      
Binding binding = new Binding
{
    Path = new PropertyPath("Width"),
    Source = vm.Image
};
nameOfGridInXaml.SetBinding(Image.WidthProperty, binding);
于 2012-10-09T13:12:24.890 回答
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 文件中定义的。

于 2012-10-17T09:38:22.663 回答