■73233 / inTopicNo.1) |
ActualWidth/HeightをVMにバインド |
□投稿者/ jinjin (1回)-(2014/08/29(Fri) 17:30:16)
|
分類:[.NET 全般]
VisaulStudio 2012
C#
.NET 4.0
★目的
ImageコントロールにBitmapSource(WriteableBitmap)を表示したい。
ビットマップのサイズは、Imageコントロール(実際には、Imageを囲むBorder)のサイズに合わせたい。
コードで書くと
void Image_SizeChaned(){
viewModel.ChartSize = new Size(border.ActualWidth,border.ActualHeight);
}
↑↑↑ このようなことをしたい。
★現状と問題点
XAMLで、Width/HeightをViewModelにバインドすることには成功したが、
Windowが開いた時に、サイズをViewModelに反映する方法がわからない。
↑↑↑ 説明が下手ですが…
ウィンドウをマウスで引き伸ばした時は
うまく、VMにサイズが伝わっている。
WindowのImageコントロール関連のXAMLは
<Border x:Name="_ChartBaseControl" Grid.Column="2"
v:SizeObserver.Observe="True"
v:SizeObserver.ObservedWidth="{Binding BitmapWidth,Mode=OneWayToSource}"
v:SizeObserver.ObservedHeight="{Binding BitmapHeight,Mode=OneWayToSource}"
>
<Image DataContext="{Binding ChartingViewModel, Mode=OneWay}" Source="{Binding Bitmap, Mode=OneWay}" Stretch="None" />
</Border>
ここの、"SizeObserver"は、
http://stackoverflow.com/questions/1083224/pushing-read-only-gui-properties-back-into-viewmodel
↑↑↑ここにあります。
ここのバインドはうまく行っている。
★★★問題(聞きたいこと)は、WindowのDataContextにViewModelが設定された時、このバインドが動作してほしい。
DataContextのInjectは
<Window.DataContext>
<Binding Mode="OneWay" Path="ViewModel" Source="{StaticResource _viewModelServer}"/>
</Window.DataContext>
今はコードビハインド(WindowのDataContextChangedイベント)で、
private void Window_DataContextChanged(object sender, DependencyPropertyChangedEventArgs e)
{
var v = e.NewValue as MainWindowViewModel;
if (v != null)
{
v.ChartingViewModel.BitmapSize = new Size(_ChartBaseControl.ActualWidth, _ChartBaseControl.ActualHeight);
}
}
↑↑↑ これを入れれば、万事OKなのです。
この後は、マウスでWindowのサイズを変更(それに伴いBorderのサイズも変更される)
にしたがって、ビットマップのサイズを変更、データの描画、Imageへの表示ができています。
が、できればコードビハインドを削除したいのです。
何卒、
よろしくおねがいします!
JinJin
|
|