2016-03-25 6 views
0

Ich habe wenig Wissen über mvvm, aber das ist, wie ich meinen Code so weit schrieb:Wie binden Sie Daten von View zu 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> 

und Ansichtsmodell:

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

     public ViewMainMenuViewModel() 
     { 

     } 
    } 

Also im Grunde möchte ich einige Bild in der Ansicht sichtbar werden wenn die Maus über einer Taste ist. Sobald dieses Bild sichtbar ist, möchte ich "Visible" an eine Eigenschaft in der ViewModel-Klasse senden. Was fehlt mir noch in dieser Klasse?

+0

Senden Sie nicht "Sichtbar" an das Viewmodel, wenn Sie dies tun, dann brechen Sie eine der grundlegenden Regeln von MVVM (Trennung zwischen Ansicht und Viewmodel). – slugster

+0

Ja, ich weiß ... Ich sollte es als Boolean oder String senden, und ich weiß, ich sollte Sichtbarkeit zu booleschen Konverter verwenden .... – Ivan

+0

Versucht Bindung "IsMouseOver" mit 'OneWayToSource'? Ich denke, das war in früheren .NET-Versionen unmöglich, vielleicht ist es nicht mehr. –

Antwort

1

Sie benötigen keine Eigenschaft in VM, um dies zu tun. Sie können Trigger auf Ansicht selbst verwenden, um das Bild bei Mausklick wie unten gezeigt anzuzeigen/auszublenden. Hier ist ElementName der Name der Schaltfläche, deren Mouseover Sie erfassen möchten.

<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

Danke für die Antwort. Der Grund, warum ich es an die Eigenschaft im ViewModel senden möchte, ist, dass ich eine andere Ansicht (XAML) habe, in der sich auch etwas ändern muss, wenn man in der ersten Ansicht die Maus über die Schaltfläche bewegt. Deshalb wollte ich es in der Eigenschaft speichern und es dann weiter zu anderen Viewmodel oder etwas weiterreichen .... – Ivan

Verwandte Themen