J'ai des problèmes lorsque j'essaie de lier la hauteur et la largeur d'une fenêtre aux propriétés de mon modèle de vue. Voici un petit exemple d'application pour illustrer le problème. Voici le code dans app.xaml.xsProblèmes de liaison avec la hauteur et la largeur de la fenêtre
public partial class App : Application
{
protected override void OnStartup(StartupEventArgs e)
{
base.OnStartup(e);
MainWindow mainWindow = new MainWindow();
MainWindowViewModel mainWindowViewModel = new MainWindowViewModel();
mainWindow.DataContext = mainWindowViewModel;
mainWindow.Show();
}
}
Ceci est MainWindow.xaml:
<Window x:Class="TestApp.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Height="{Binding WindowHeight}"
Width="{Binding WindowWidth}"
BorderThickness="{Binding WindowBorderThickness}">
</Window>
Et c'est le modèle de vue:
public class MainWindowViewModel
{
public int WindowWidth { get { return 100; } }
public int WindowHeight { get { return 200; } }
public int WindowBorderThickness { get { return 8; } }
}
Lorsque le programme est lancé le getters de WindowHeight et WindowBorderThickness (mais pas WindowWidth) sont appelés, donc la hauteur et la bordure de la fenêtre sont définies correctement, mais pas la largeur.
ajouter ensuite le bouton qui déclenchera PropertyChanged pour toutes les propriétés, de sorte que le modèle de vue ressemble maintenant à ceci:
public class MainWindowViewModel : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
public void TriggerPropertyChanges()
{
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs("WindowWidth"));
PropertyChanged(this, new PropertyChangedEventArgs("WindowHeight"));
PropertyChanged(this, new PropertyChangedEventArgs("WindowBorderThickness"));
}
}
public ICommand ButtonCommand { get { return new RelayCommand(delegate { TriggerPropertyChanges(); }); } }
public int WindowWidth { get { return 100; } }
public int WindowHeight { get { return 200; } }
public int WindowBorderThickness { get { return 8; } }
}
Maintenant, quand je clique sur le bouton, le getter de WindowBorderThickness est appelé, mais pas ceux pour WindowWidth et WindowHeight. Tout semble juste très étrange et inconsistant pour moi. Qu'est-ce que je rate?
Avez-vous un avertissement dans la fenêtre de sortie lors du débogage? – Drake
Non, il n'y a pas d'avertissement. –