Próbuję powiązać 2 różne formanty WPF z tą samą właściwością w ViewModel, CheckBox.IsChecked i Expander.IsExpanded. Zachowanie, które chcę osiągnąć, polega na tym, że CheckBox wpływa na ViewModel (a zatem i na Expander), ale nie w inny sposób związany. Coś jak: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
Oto 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>
i Kod:
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 { };
}
}
Teraz mój problem jest, jak tylko kliknąć na Expander aby rozwinąć/zwinąć to, Binding wydaje się przestać działać. Czy ktoś może mi wyjaśnić, dlaczego tak się dzieje i jak mam to osiągnąć? Z góry dziękuję!
Tworzę widok z co najmniej 6 ekspanderów z Checkboxes na ich nagłówkach. Jest za dużo kodu i wolę nie używać żadnego kodu, ponieważ zmniejsza on elastyczność widoku. –
@HighCore Jeśli masz wiele modułów Expanders/CheckBox, prawdopodobnie masz dla nich domyślny styl i możesz ustawić zdarzenie Click jako EventSetter w stylu. Chciałbym użyć czegoś do nawigacji po drzewie wizualnym, aby znaleźć Expander związany z tym CheckBoxem i nie musiałbyś w ogóle używać nazwanych wartości. – Rachel
@HighCore Zobacz moją zaktualizowaną odpowiedź. Działa bez kodu źródłowego – Rachel