Sitter och bråkar med .NET om att binda data till en Combobox i WPF. tja, gjorde en sån här leksak Ja det fungerar, men det är inte riktigt det som är mitt problem. För nu så har du ett beroende mellan de olika kontrollerna på sidan, men hur får du din combbox att vara default till ett specifikt värde, och den informationen finns i din Setup klass. Det är det som jag inte lyckas med... *jag* har ingen setup klass, trollade inte fram någon sån eftersom du inte berättat vad den innehöll.Problem med comboboxar i WPF.
Här är min kod i XAML
<ComboBox Name="cbActivator" ItemsSource="{Binding}" DisplayMemberPath="Value" SelectedValuePath="Key" Height="20"/>
Och är är koden i cs.
cbctivator.DataContext = ActivatorClass.Collection;
public class ActivatorClass
{
public static List<ActivatorClass> Collection
{
get
{
List<ActivatorClass> list = new List<ActivatorClass>();
list.Add(new ActivatorClass(1, "Dependency"));
list.Add(new ActivatorClass(2, "Polling"));
list.Add(new ActivatorClass(3, "Scheduled"));
return list;
}
}
public int Key { get; set; }
public string Value { get; set; }
public ActivatorClass(int key, string value)
{
this.Key = key;
this.Value = value;
}
}
Det fungerar bra, jag får en lista med mina activators i min combobox. Men nu har jag ju data på vilken item i lista som jag vill skall vara vald. Då kan man ju göra det på lite olika sätt.
Man kan sätta det i koden.
cbActivator.SelectedValue = setup.SelectedActivator;
Där selectedActivator innehåller värdet 2. Det fungerar fint, rätt item blir vald i listan.
Man kan även göra det i XAML-koden.
<ComboBox Name="cbActivator" ItemsSource="{Binding}" DisplayMemberPath="Value" SelectedValuePath="Key" Height="20"
SelectedValue="2" />
Vilket även detta fungerar och rätt item är vald i lista, lite tråkigt med hårdkodning dock och jag vill ju ta värdet från min setup klass. Så då testade jag med det.
<StackPanel Name="sp">
<ComboBox Name="cbActivator" ItemsSource="{Binding}" DisplayMemberPath="Value" SelectedValuePath="Key" Height="20"
SelectedValue="{Binding Path=SelectedActivator}" />
</StackPanel>
Och i cs.
sp.DataContext = setup;
Så jag har bundit min setup-information till föräldern till comboboxen och säger nu till comboboxen att ta värdet i SelectedActivators från Setup. OCH DET JÄVLA SKITET VÄGRAR FUNGERA... Jag blir så lack....
För att kolla så jag gjort rätt så la jag in en textbox i stackpanel och band till Activators i min setup och fick ut rätt namn, så det måste gå att göra så här, men vad gör jag för fel...
- M
Sv: Problem med comboboxar i WPF.
<Window x:Class="WPFComboBox.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:src="clr-namespace:WPFComboBox"
Title="Window1" Height="300" Width="300" Loaded="Window_Loaded">
<Window.Resources>
<DataTemplate DataType="{x:Type src:ActivatorClass}">
<TextBlock Text="{Binding Path=Value}"></TextBlock>
</DataTemplate>
</Window.Resources>
<Grid>
<Grid.RowDefinitions>
<RowDefinition/>
<RowDefinition/>
</Grid.RowDefinitions>
<ComboBox Name="cbActivator" ItemsSource="{Binding}"
IsSynchronizedWithCurrentItem="True" Height="20"/>
<ListBox ItemsSource="{Binding}" IsSynchronizedWithCurrentItem="True" Grid.Row="1"></ListBox>
</Grid>
</Window>
Window_Loaded event handlern
private void Window_Loaded(object sender, RoutedEventArgs e)
{
DataContext = ActivatorClass.Collection;
}
aktivatorklassen är exakt likadan. Oberoende ifall jag ändrar comboboxen eller listan så uppdateras valt element. Ifall du inte använder samma view så bör du antagligen byta ut din List<ActivatorClass> mot ObservableCollection<ActivatorClass>.
Sv:Problem med comboboxar i WPF.
Vad jag vill är ju att all den informationen som finns i min setup-klass skall bindas till de olika kontrollerna på sidan: Checboxar, textboxar, comboboxar. Och varje combobox har ju sin egen datacontext, men skall få rätt item i comboboxen vald utifrån värdet i setup klassen.
- MSv: Problem med comboboxar i WPF.
Men en gissning är ju att du inte har implementerat INotifyPropertyChanged på den relevanta propertyn du binder till.