Спасибо. Надеюсь, я смогу загрузить все решение, потому что я подготовил его, прежде чем открывать этот вопрос. но я не нашел, как это сделать. Я скопирую весь код так, как только могу.WPF RadioButton известная проблема: почему старое значение свойства кажется обязательным после изменения свойства
Вопрос в следующем: Я думаю, что это простая реплицированная проблема в WPF. Я сделал простую версию кода, чтобы четко объяснить мой вопрос. Контейнер «TwoPersons» в образце имеет два экземпляра класса «Человек». Свойство «Current» будет представлять собой контекст данных детали. панель, которая заполняет подробную информацию о человеке. Я могу использовать метод тотализатора , чтобы прыгать между разными видами. Я могу видеть детали соответственно. Вопрос заключается в переключении и населяющего текущего человека, изменения пользовательского интерфейса изменяются (например, изменение мужчины до женщин), то изменение влияет на ПРЕДЫДУЩИЙ пункт, он был обязательным. Экземпляр persion будет изменен без изменений. Кажется, предыдущий экземпляр все еще имеет связь с представлением после привязки нового экземпляра. Как я могу избежать этой ситуации. Любая помощь будет оценена.
============================================================================================================================================================================== ============================
Это MainWindow.xaml.cs
/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
public partial class MainWindow : Window
{
TwoPersons twoPersons = new TwoPersons();
public MainWindow()
{
InitializeComponent();
DataContext = twoPersons;
}
private void Button_Click(object sender, RoutedEventArgs e)
{
twoPersons.Next();
}
}
контейнер с двумя человек:
public class TwoPersons : INotifyPropertyChanged
{
Person p1 = new Person("Mary") { IsFemale = true };
Person p2 = new Person("Luis") { IsMale = true };
Person current;
public Person Current
{
get
{
if (current == null)
current = p1;
return current;
}
set
{
if (current != value)
{
current = value;
OnPropertyChanged("Current");
}
}
}
public void Next()
{
Current = Current == p1 ? p2 : p1;
}
private void OnPropertyChanged(string propertyName)
{
if (PropertyChanged != null)
{
PropertyChangedEventArgs e = new PropertyChangedEventArgs(propertyName);
PropertyChanged(this, e);
}
}
public event PropertyChangedEventHandler PropertyChanged;
}
человек класс:
public class Person : INotifyPropertyChanged
{
public Person(string name)
{
this.name = name;
}
private string name;
public string Name
{
get { return name; }
}
public bool isMale;
public bool IsMale
{
get { return isMale; }
set
{
if (isMale != value)
{
isMale = value;
OnPropertyChanged("IsMale");
OnPropertyChanged("IsFemale");
OnPropertyChanged("Description");
}
}
}
public bool IsFemale
{
get { return !isMale; }
set { IsMale = !value; }
}
public string Description
{
get
{
return isMale ? "Male" : "Female";
}
}
private void OnPropertyChanged(string propertyName)
{
if (PropertyChanged != null)
{
PropertyChangedEventArgs e = new PropertyChangedEventArgs(propertyName);
PropertyChanged(this, e);
}
}
public event PropertyChangedEventHandler PropertyChanged;
}
Главное окно XAML
<Grid>
<StackPanel DataContext="{Binding Current}">
<TextBlock Text="{Binding Name}"></TextBlock>
<RadioButton IsChecked="{Binding IsMale}">Male</RadioButton>
<RadioButton IsChecked="{Binding IsFemale}">Female</RadioButton>
<TextBlock Text="{Binding Description}"></TextBlock>
<Button Click="Button_Click" Height="32">Next >></Button>
<TextBlock>Note. Mary should be alway a female! But it changes when navigating by clicking the button above </TextBlock>
</StackPanel>
</Grid>
Ваш вопрос не является достаточно ясным, что привязка не работает должным образом? – makc
Да, довольно сложно понять, что именно не так. XAML, который позволяет воспроизвести проблему, будет лучшим. – Somedust
@Somedust ... попробуйте прокрутить вниз, чтобы увидеть XAML. – Sheridan