Ich ging voran und schuf eine Hallo Welt Version dafür. Hier ist das XML. Dies sollte einfach das Banner ändern, wenn auf den Text im Textfeld geklickt wird. Ich konnte kein super einfaches Beispiel finden, also habe ich einfach eins gemacht. Offensichtlich gibt es weit fortgeschrittene Wege, um dies zu tun, aber es sollte für eine einfache Version aus bauen.
<Window x:Class="Hello_World.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525">
<Grid>
<Label Name="MyLabel" Content="{Binding MyLabel}" HorizontalAlignment="Left" Margin="58,37,0,0" VerticalAlignment="Top" Height="65" Width="423" FontSize="44"/>
<TextBox Name="MyTextBox" HorizontalAlignment="Left" Height="28" Margin="163,162,0,0" TextWrapping="Wrap" Text="TextBox" VerticalAlignment="Top" Width="163"/>
<Button Content="Change Banner" HorizontalAlignment="Left" Margin="251,209,0,0" VerticalAlignment="Top" Width="109" Click="Button_Click"/>
</Grid>
</Window>
Als nächstes ist die Modelview, die den INotifyPropertyChanged
-Schnittstelle implementiert. Beachten Sie, dass Sie das Singleton-Muster für die enthaltenen Eigenschaften verwenden müssen. Auf diese Weise können Sie die Methode OnPropetyChanged()
immer dann aufrufen, wenn die Eigenschaft festgelegt ist.
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Hello_World
{
public class ModelView: INotifyPropertyChanged
{
private string _myLabel;
public string MyLabel
{
get { return _myLabel; }
set
{
_myLabel = value;
OnPropertyChanged("MyLabel");
}
}
public event PropertyChangedEventHandler PropertyChanged;
private void OnPropertyChanged(string propetyName)
{
if(PropertyChanged != null)
PropertyChanged(this,new PropertyChangedEventArgs(propetyName));
}
}
}
schließlich das Hauptfenster. Setzen Sie die DataContext
im Hauptkonstruktor. Hinweis Ich hätte DataContext
des Hauptgitters festlegen können, und alle untergeordneten Elemente erben dasselbe DataContext
. Dies würde verhindern, dass Sie alle Komponenten einzeln einstellen müssen.
namespace Hello_World
{
/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
public partial class MainWindow : Window
{
private ModelView MyModel;
public MainWindow()
{
InitializeComponent();
MyModel = new ModelView();
// Here's where I'm setting the object to look at.
MyLabel.DataContext = MyModel;
// Now I don't need to access the textbox directly.
MyModel.MyLabel = "Hello World";
}
private void Button_Click(object sender, RoutedEventArgs e)
{
MyModel.MyLabel = MyTextBox.Text;
}
}
}
Setzen Sie den 'Datacontext' Ihres Labels auf Ihr' Model'? –
Nein, wie soll ich das machen? Da ich 'DataContext' vorher noch nicht benutzt habe, rate mal, was es ist. – HyunMi
Zuerst benötigen Sie eine Klasse, die 'INotifyPropertyChanged' implementiert. Diese Klasse wäre Ihr' Model View' Teil. Dann müssen Sie ein Objekt dieser Klasse instanziieren und den DataContext auf das Objekt festlegen. Grundsätzlich weiß es, wo es hinschauen soll. Sie müssen wirklich ein gutes Tutorial finden. –