Sto tentando di associare 2 diversi controlli WPF alla stessa proprietà nel ViewModel, a CheckBox.IsChecked e Expander.IsExpanded. Il comportamento che voglio ottenere è far sì che il CheckBox influenzi il ViewModel (e quindi anche l'Expander), ma non il contrario. Qualcosa di simile:WPF One Way Binding broken
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
Ecco il 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>
e del Codice:
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 { };
}
}
Ora il mio problema è, non appena clicco sul Expander per espandere/crollo esso, il legame sembra smettere di funzionare. Qualcuno può spiegarmi perché questo sta accadendo e come posso ottenere questo? Grazie in anticipo!
Sto creando una vista con almeno 6 espansori con caselle di controllo sulle intestazioni. È troppo codice e preferisco non usare alcun codice perché riduce la flessibilità della vista. –
@HighCore Se hai più espansioni/checkbox, probabilmente hai uno stile predefinito per loro e potresti impostare l'evento Click come EventSetter nello stile. Vorrei usare qualcosa per navigare nell'albero visivo per trovare l'Expander associato a quel CheckBox e non avresti assolutamente bisogno di usare valori nominali. – Rachel
@HighCore Vedere la mia risposta aggiornata. Funziona senza code-behind – Rachel