webForumDet fria alternativet

WPF..

1 svar · 435 visningar · startad av Gladh

GladhMedlem sedan maj 20012 812 inlägg
#1

Sitter och bråkar med .NET om att binda data till en Combobox 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"
[b]SelectedValue="2"[/b] />

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"
[b]SelectedValue="{Binding Path=SelectedActivator}"[/b] />
</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

GladhMedlem sedan maj 20012 812 inlägg
#2

Fix hjälp med en lösning.

code-behind

public partial class Window1 : Window

{

public static readonly DependencyProperty CompanyPositionProperty = DependencyProperty.Register("CompanyPosition", typeof(ObservableCollection<CompanyPosition>), typeof(Window1));

 

public ObservableCollection<CompanyPosition> CompanyPosition {

get { return (ObservableCollection<CompanyPosition>)GetValue(Window1.CompanyPositionProperty); }

set { SetValue(Window1.CompanyPositionProperty, value); }

}

 

public Window1() {}

private void Window_Loaded(object sender, RoutedEventArgs e)

{

this.CompanyPosition = new ObservableCollection<CompanyPosition>();

this.CompanyPosition.Add(new CompanyPosition(1, "Big boss"));

this.CompanyPosition.Add(new CompanyPosition(2, "Small boss"));

this.CompanyPosition.Add(new CompanyPosition(3, "Worker"));

DataContext = new Person();

}

}

 

public class Person

{

public string Name { get; set; }

public int SelectedActivator { get; set; }

public Person()

{

this.Name = "Magnus";

this.SelectedActivator = 2;

}

}

 

public class CompanyPosition

{

public int Key { get; set; }

public string Value { get; set; }

public CompanyPosition(int key, string value)

{

this.Key = key;

this.Value = value;

}

}

XAML-filen

<Window x:Class="WpfApplication1.Window1" x:Name="_root"

xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"

xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"

Title="Window1" Height="300" Width="300" Loaded="Window_Loaded">

<Grid>

<Grid.RowDefinitions>

<RowDefinition/>

<RowDefinition/>

<RowDefinition/>

</Grid.RowDefinitions>

<TextBox Grid.Row="0" Name="txtName" Text="{Binding Path=Name}" Height="20"/>

<ComboBox Grid.Row="1" Name="cbActivator" ItemsSource="{Binding 

Path=CompanyPosition, ElementName=_root}" SelectedValue="{Binding Path=SelectedActivator}"

SelectedValuePath="Key" DisplayMemberPath="Value" Height="20"/>

</Grid>

</Window>
133 ms totalt · 3 externa anrop · v20260731065814-full.30151723
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
130 ms — hämta tråd, inlägg och bilagor (db)