Tengo algunos problemas cuando intento vincular el alto y el ancho de una ventana a las propiedades en mi modelo de vista. Aquí hay una pequeña aplicación de muestra para ilustrar el problema. Este es el código en app.xaml.xsProblemas con el enlace a la altura y el ancho de la ventana
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();
}
}
Ésta es 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>
Y este es el modelo de vista:
public class MainWindowViewModel
{
public int WindowWidth { get { return 100; } }
public int WindowHeight { get { return 200; } }
public int WindowBorderThickness { get { return 8; } }
}
cuando se inicia el programa de la se llaman a los captadores de WindowHeight y WindowBorderThickness (pero no WindowWidth), por lo que la altura y el borde de la ventana se establece correctamente, pero no el ancho.
Luego agregar el botón que activará PropertyChanged para todas las propiedades, por lo que el modelo de vista ahora se ve así:
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; } }
}
Ahora, cuando haga clic en el botón, el captador de WindowBorderThickness se llama, pero no los de WindowWidth y WindowHeight. Todo parece muy extraño e inconsistente para mí. ¿Qué me estoy perdiendo?
¿tiene alguna advertencia en la ventana de salida durante la depuración? – Drake
No, no hay advertencias. –