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を作成する必要があります。グリッドを作成し、その子として画像を追加するのは簡単ですが、バインディングを作成するにはどうすればよいですか?

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 に答える