J'ai une zone de liste déroulante définie en tant que telleSilverlight MVVM Combobox Binding se
<ComboBox Name="RoomDropDown" Visibility="{Binding Path=RoomDropDownVisible,Mode=OneWay,Converter={StaticResource BoolVisibilityConvertor}}"
ItemsSource="{Binding Path=RoomList,Mode=OneWay}" DisplayMemberPath="display" SelectedValuePath="display" SelectedValue="{Binding Path=Room,Mode=TwoWay}"/>
Il y a 2 propriétés définies dans le ViewModel, RoomList qui est Liste et la propriété de chambre qui est une chaîne.
La première fois que je lance l'application, tout fonctionne correctement, et la liste déroulante obtient les valeurs correctes et les valeurs correctes sont sélectionnées. Toutefois, dans certaines conditions, la propriété RoomList est remplacée par une autre source & la propriété Room est également modifiée. Le problème qui se produit actuellement est que la zone de liste affiche les valeurs correctes mais que la valeur sélectionnée n'est pas sélectionnée. Pire, nous pouvons vivre avec cela, mais le setter est également ne tirant pas lorsque la valeur est modifiée manuellement dans le DropDown.
Des indications sur ce qui ne va pas ici?
Followup: Ne pensez pas que je réussi à obtenir exactement le problème à travers, voici quelques exemples de code que je voulais ajouter pour illustrer le problème:
<Grid x:Name="LayoutRoot" Background="White">
<StackPanel VerticalAlignment="Center" Width="100">
<ComboBox Name="TestBox" Height="20" Width="100" ItemsSource="{Binding Path=ComboSource}" DisplayMemberPath="display" SelectedValuePath="code"
SelectedValue="{Binding Path=ComboSelection,Mode=TwoWay}"/>
<Button Content="Click Here" Click="Button_Click" />
</StackPanel>
</Grid>
public MainPage()
{
InitializeComponent();
this.Loaded += (s, e) =>
{
var temp = new List<Binding>();
temp.Add(new Binding() { code = "1", display = "One" });
temp.Add(new Binding() { code = "2", display = "Two" });
this.ComboSource = temp;
this.ComboSelection = "1";
this.DataContext = this;
};
}
private static readonly DependencyProperty ComboSelectionProperty =
DependencyProperty.Register("ComboSelectionProperty", typeof(string), typeof(MainPage), new PropertyMetadata(null));
public string ComboSelection
{
get { return (string)GetValue(ComboSelectionProperty); }
set
{
SetValue(ComboSelectionProperty, value);
this.RaisePropertyChanged("ComboSelection");
}
}
private static readonly DependencyProperty ComboSourceProperty =
DependencyProperty.Register("ComboSourceProperty", typeof(List<Binding>), typeof(MainPage), new PropertyMetadata(null));
public List<Binding> ComboSource
{
get
{
return (List<Binding>)GetValue(ComboSourceProperty);
}
set
{
SetValue(ComboSourceProperty, value);
this.RaisePropertyChanged("ComboSource");
}
}
private void Button_Click(object sender, RoutedEventArgs e)
{
var temp = new List<Binding>();
temp.Add(new Binding() { code = "3", display = "Three" });
temp.Add(new Binding() { code = "4", display = "Four" });
this.ComboSource = temp;
this.ComboSelection = "3";
}
#region INotifyPropertyChanged Members
public event PropertyChangedEventHandler PropertyChanged;
private void RaisePropertyChanged(string propertyName)
{
if (this.PropertyChanged != null)
PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
#endregion
}
public class Binding
{
public string code {get; set;}
public string display { get; set; }
}
Pas strictement MVVM, mais pour expliquer la problème, lorsque l'événement de clic de bouton est déclenché, la Combosource est modifiée avec une nouvelle sélection en cours, mais cette sélection ne lie pas et le problème que j'ai mentionné ci-dessus commence à se produire.
Ajout de la section de suivi à la question ci-dessus. – user457485