Dans une application MVVM Silverlight, l'utilisateur peut entrer du texte dans la zone de texte et le contenu de ListBox change en conséquence. E.g .: Si l'utilisateur saisit "TV", la ListBox remplira toutes les marques de télévision disponibles et l'utilisateur pourra sélectionner un produit parmi les entrées ListBox et ListBox; Ensuite, s'il entre "ordinateur" contenu ListBox changer et remplir avec ComputerNames.ClearSelection dans ListBox MVVM
Dès que l'utilisateur saisit quelque chose, il recherche dans un dictionnaire avec des valeurs correspondant à la clé.
Vue:
<TextBox Name="SearchTBox" Text="{Binding SearchStr,UpdateSourceTrigger=PropertyChanged}" />
<ListBox Name="AnalysisLBox" ItemsSource="{Binding DataList,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}"
SelectedItem="{Binding UserSelectedItem,Mode=TwoWay}"
Width="250" BorderBrush="Transparent" SelectedIndex="{Binding LBoxSelectedIndex,Mode=TwoWay}">
<ListBox.ItemTemplate>
<DataTemplate>
<StackPanel>
<TextBlock Text="{Binding}" />
</StackPanel>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
ViewModel:
SortedDictionary Data()
{
List<string> tvList = new List<string>() { "Sony", "SamSung", "LG","Sharp" };
List<string> computerList = new List<string>() { "HP","Dell","Lenovo","Gateway" };
List<string> cameraList = new List<string>() { "Nikon","Sony","Panasonic" };
SortedDictionary<string, List<string>> Data = new SortedDictionary<string, List<string>>();
Data.Add("TV", billingList);
Data.Add("Computer", salesOutList);
Data.Add("Camera", customerAllocationList);
}
ObservableCollection<string> dataList = new ObservableCollection<string>();
public ObservableCollection<string> DataList
{
get { return dataList ; }
set { dataList = value; NotifyPropertyChanged("DataList"); }
}
int lBoxSelectedIndex;
public int LBoxSelectedIndex
{
get { return lBoxSelectedIndex; }
set { lBoxSelectedIndex = value; NotifyPropertyChanged("LBoxSelectedIndex"); }
}
string userSelectedItem;
public string UserSelectedItem
{
get { return userSelectedItem; }
set
{
userSelectedItem = value;
dataList.Clear();
LBoxSelectedIndex =-1;
NotifyPropertyChanged("UserSelectedItem");
}
}
Dès qu'une chaîne utilisateur clés correspondances dactylographié ('TV'), il remplit un ObservableCollection<string>
datalist avec tvList qui est lié à la ListBox. L'utilisateur tape Camera, efface la dataList et ajoute cameraList. Le problème se produit ici. La sélection de listBox n'est pas effacée lorsqu'elle efface les données et les remplit avec de nouvelles données. Le même élément à l'emplacement précédemment sélectionné reste sélectionné. J'ai essayé de définir SelectedIndex à -1 à partir de la propriété UserSelectedItem du ViewModel mais cela n'a pas fonctionné.
Je ne comprends pas, vous voulez effacer la zone de liste lorsque la sélection change listbox? –
Efface la zone de liste dès que l'utilisateur sélectionne un élément dans la zone de liste. – Prathibha