Estoy tratando de vincular 2 controles WPF diferentes a la misma propiedad en el modelo de vista, un CheckBox.IsChecked y un Expander.IsExpanded. El comportamiento que quiero lograr es hacer que CheckBox afecte al ViewModel (y por lo tanto también al Expansor), pero no a la otra manera. Algo así como:WPF One Way Enlace roto
Checkbox Checked -> ViewModel property set to frue -> Expander.Expand
Checkbox Unchecked -> ViewModel property set to false -> Expander.Collapse
Expander Expanded -> Nothing else affected
Expander Collapsed -> Nothing else affected
Aquí está el XAML:
<Window x:Class="WpfApplication9.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">
<Expander IsExpanded="{Binding IsChecked, Mode=OneWay}">
<Expander.Header>
<CheckBox IsChecked="{Binding IsChecked}" Content="Is Checked"/>
</Expander.Header>
<TextBlock Text="Expanded!"/>
</Expander>
</Window>
y el Código:
using System.ComponentModel;
using System.Windows;
namespace WpfApplication9
{
/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
DataContext = new ViewModel();
}
}
public class ViewModel: INotifyPropertyChanged
{
private bool _isChecked;
public bool IsChecked
{
get { return _isChecked; }
set
{
_isChecked = value;
NotifyPropertyChange("IsChecked");
}
}
protected void NotifyPropertyChange(string PropertyName)
{
PropertyChanged(this, new PropertyChangedEventArgs(PropertyName));
}
public event PropertyChangedEventHandler PropertyChanged = delegate { };
}
}
Ahora mi problema es que tan pronto como haga clic en el expansor para expandir/contraer esto, el Enlace parece dejar de funcionar. ¿Alguien puede explicarme por qué sucede esto y cómo lo logro? ¡Gracias por adelantado!
Im creando una vista con al menos 6 expansores con casillas de verificación en sus encabezados. Es demasiado código, y prefiero no usar ningún código porque reduce la flexibilidad de la vista. –
@HighCore Si tiene múltiples Expansores/Casillas de verificación, es probable que tenga un estilo predeterminado para ellos y podría establecer el evento Click como un EventSetter en el estilo. Utilizaría algo para navegar por el árbol visual para encontrar el expansor asociado con ese CheckBox y no necesitaría usar ningún valor con nombre. – Rachel
@HighCore Ver mi respuesta actualizada. Funciona sin código subyacente – Rachel