2016-03-25 18 views
0

私はMVVMについて少し知識を持っているが、これは私がこれまでのところ私のコードを書いた方法です:ViewからViewModelへデータをバインドする方法は?

<Image x:Name ="new_tooltip" Grid.Row="84" Grid.Column="57" Grid.ColumnSpan="78" Grid.RowSpan="15" Source="/MS_Show_Assets/MainMenuAssets/TT-Startscreen-MainMenu-New-DE.png" Visibility = "{Binding IsMouseOver, ElementName=New, Converter={StaticResource BooleanToVisibilityConverter}}"> 
      <Image.Style> 
       <Style TargetType="{x:Type Image}"> 
        <Setter Property="Visibility" Value="{Binding Path=IsNewTooltipVisible, Mode=OneWayToSource}" /> 
       </Style> 
      </Image.Style> 
     </Image> 

とのViewModel:

public class ViewMainMenuViewModel : BindableBase 
    { 
     public string IsNewTooltipVisible { get; set; } 

     public ViewMainMenuViewModel() 
     { 

     } 
    } 

だから、基本的に、私は、ビュー内の一部の画像が見えるようになりたいですマウスがあるボタンの上にある場合。その後、このイメージが表示されたら、ViewModelクラスにあるプロパティに "Visible"を送信します。私はこのクラスで何が欠けていますか?

+0

MVVMの基本的な規則の1つ(ビューとビューモデルの分離)を破っている場合、ビューモデルに「可視」を送信しないでください。 – slugster

+0

はい、私は知っている...私はブール値または文字列として送信する必要があり、私はvisibilitytobooleanコンバータを使用する必要があります.... – Ivan

+0

'OneWayToSource'を使用して' IsMouseOver'を試してみましたか?以前の.NETバージョンではこれは不可能だったと思います。 –

答えて

1

これを行うには、VMでプロパティを必要としません。ビュー上でトリガを使用すると、ボタンのマウスオーバー時に画像を表示/非表示にすることができます。ここでElementNameは、マウスオーバーをキャプチャしたいボタンの名前です。

<Image x:Name ="new_tooltip" Grid.Row="84" Grid.Column="57" Grid.ColumnSpan="78" Grid.RowSpan="15" Source="/MS_Show_Assets/MainMenuAssets/TT-Startscreen-MainMenu-New-DE.png" Visibility = "{Binding IsMouseOver, ElementName=New, Converter={StaticResource BooleanToVisibilityConverter}}"> 
      <Image.Style> 
       <Style TargetType="{x:Type Image}"> 
        <Setter Property="Visibility" Value="Collapsed"></Setter> 
        <Style.Triggers> 
         <DataTrigger Binding="{Binding IsMouseOver, ElementName=myButton}" Value="true"> 
          <Setter Property="Visibility" Value="Visible"></Setter> 
         </DataTrigger> 
        </Style.Triggers> 
       </Style> 
      </Image.Style> 
     </Image> 
+0

答えをありがとう。私がViewModelのプロパティに送る理由は、最初のビューでマウスオーバーボタンで何かを変更する必要がある別のView(XAML)があります。だから、私はそれをプロパティに格納して、それを他のビューモデルや何かにさらに渡したかったのです。 – Ivan

関連する問題