【问题标题】:Creating bindings in code (WinRT)在代码中创建绑定 (WinRT)
【发布时间】:2012-10-09 12:59:25
【问题描述】:

我有以下课程

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 作为其子级很容易,但是如何创建绑定呢?

【问题讨论】:

  • 为什么需要在 C# 代码中创建它?为什么 DataTemplate 不起作用?更多关于您正在尝试做的事情的背景信息将帮助您找到正确的答案。
  • 我需要编写一个组件,另一个应用程序将调用该组件并将网格与广告一起包含到 RichTextBlock 中

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


【解决方案1】:

尝试一些类似的东西

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

【讨论】:

    【解决方案2】:

    我找到了一个更简单的方法。我将 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 文件中定义。

    【讨论】:

      猜你喜欢
      • 2015-07-17
      • 1970-01-01
      • 2011-01-27
      • 2018-06-26
      • 2017-01-25
      • 1970-01-01
      • 2016-09-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多