2017-10-26 11 views
0

Ich verwende Caliburn.Micro in einem WPF-Projekt mit C#.Wie bekomme ich TextBlock vom View und manipuliere es im ViewModel?

Ich wollte einen Weg, wie in Android, um einen "TextBlock" in einer XAML-Ansicht durch seine "ID" zu finden, so dass ich seine Eigenschaften manipulieren kann.

Ich dachte an so etwas wie dies zu tun, aber für C#:

TextBlock textblock = (TextBlock) myView.findViewById(R.id.myTextBlock); 

so kann ich zusammenbrechen und wieder sichtbar machen.

<TextBlock x:Name="MyTextBlockId" 
       Text="Incorrect user credentials. Forgot password, click here" 
       Visibility="Collapsed"/> 
+0

Von welcher Klasse versuchen Sie den Textblock zu manipulieren? – Eric

+0

Es ist eine Login-Seite. Bei einem gescheiterten Versuch würde ich also einen TextBlock "unkenntlich machen", der sagen würde, Passwort vergessen, klicken Sie hier. Ich würde dies innerhalb des ViewModels tun. – Daniel

+1

Sie sollten keine Steuermanipulationen innerhalb des Viewmodels durchführen. Die Ansicht sollte das Viewmodel kennen. Nicht umgekehrt. Wenn Sie beispielsweise eine boolesche Eigenschaft namens IsBadLogin hätten, könnten Sie die Sichtbarkeit des TextBlocks an diese Eigenschaft binden und einen BooleanToVisibilityConverter verwenden. – Eric

Antwort

1

MVVM Ansatz

Ansichtsmodell

class MyViewModel : PropertyChangedBase 
{ 
    private bool _isBadLogin; 

    public bool IsBadLogin 
    { 
     get => _isBadLogin; 
     set => Set(ref _isBadLogin, value); 
    } 
} 

XAML

<TextBlock x:Name="MyTextBlockId" 
      Text="Incorrect user credentials. Forgot password, click here" 
      Visibility="{Binding IsBadLogin, Converter={StaticResource BooleanToVisibilityConverter}"/> 
+0

Für jeden, der caliburn.Micro verwendet, müssen Sie PropertyChangedBase nicht erweitern, da Screen PropertyChangedBase erbt. – Daniel

+0

War schon immer ein Prism/MVVMLight-Typ :) – Eric

Verwandte Themen