0

この 1 週間ほど、Silverlight でイメージ エディターを使って少し作業してきました。これは初めての経験であり、データ バインディングとデータ コンテキストまたは mvvm についてはまだ完全には理解できていません。回転メソッドがあり、MainPage.xaml のテキスト ボックスからメソッドに角度値を渡せるようにしたいと考えています。初期値セットが 90 で、クリックすると関数が画像を 90 度回転させます。テキストボックスは実行時に空であり、回転角度も明らかに更新されていません。

MainPage.xaml

<Grid DataContext="{Binding Path=Project}" Height="70" Name="grid1" Width="200">
   <Grid.RowDefinitions>
      <RowDefinition Height="35" />
      <RowDefinition Height="35" />
   </Grid.RowDefinitions>
   <Grid.ColumnDefinitions>
      <ColumnDefinition Width="84*" />
      <ColumnDefinition Width="57*" />
      <ColumnDefinition Width="59*" /> 
   </Grid.ColumnDefinitions>

<Button Command="{Binding Path=RotateCWElementCommand}"
      Height="30" Name="btnRotCW" Width="30" Grid.Column="2" Margin="15,0,14,5" Grid.Row="1">
<Image Source="../Assets/Images/Icons/object-rotate-right.png" Grid.Column="1"
      Grid.Row="4" Height="20" HorizontalAlignment="Left" Name="image1" Stretch="Fill" VerticalAlignment="Top" Width="20" />
</Button>

<TextBlock FontWeight="Bold" HorizontalAlignment="Left" Margin="10,10,0,8" Text="Rotate" VerticalAlignment="Center" />
<TextBlock FontWeight="Bold" HorizontalAlignment="Left" Margin="34,9,0,10" Text="Angle:" VerticalAlignment="Center" Grid.Row="1" />
<TextBox Text="{Binding Path=RotateElement.Angle, Mode=TwoWay}" Height="24" Name="textBox1" Width="52" Grid.Column="1" Margin="0,6,5,5" Grid.Row="1" />
</Grid>

(関連コードから) Project.cs-

namespace ImageEditor.Client.BLL
{
public class Project : INotifyPropertyChanged
{

            #region Properties
            private RotateTransform rotateElement;
      public RotateTransform RotateElement
      {
        get { return rotateElement; }
        set
        {
            rotateElement = value;
            NotifyPropertyChanged("RotateElement");

        }
    }

        #endregion
    #region Methods


    private void RotateCWElement(object param)
    {
        FrameworkElement element = this.SelectedElement;
        RotateTransform RotateElement = new RotateTransform();

        RotateElement.Angle = 90;
        RotateElement.CenterX = element.ActualWidth * 0.5;
        RotateElement.CenterY = element.ActualHeight * 0.5;
        element.RenderTransform = RotateElement;


    }

ここで何が間違っていますか?問題は私のデータコンテキストですか、それともバインディングパスですか? それらは何であるべきですか?フォーマットが少しずれています。

4

1 に答える 1

2

オブジェクトが変更されたときにのみ通知し、オブジェクト内のプロパティは通知しないため、UI はオブジェクトのプロパティが変更されたことを認識しません。

 private void RotateCWElement(object param) 
 { 
        FrameworkElement element = this.SelectedElement; 
        if (this.RotateElement == null) this.RotateElement = new RotateTransform(); 

        RotateElement.Angle = 90; 
        RotateElement.CenterX = element.ActualWidth * 0.5; 
        RotateElement.CenterY = element.ActualHeight * 0.5; 
        element.RenderTransform = RotateElement; 

        //tell the UI that this property has changed
        NotifyPropertyChanged("RotateElement"); 
 } 
于 2012-07-19T10:29:16.627 に答える