Laden...

ComboBox SelectedItem refreshen

Erstellt von Cannon vor 11 Jahren Letzter Beitrag vor 11 Jahren 3.929 Views
C
Cannon Themenstarter:in
282 Beiträge seit 2008
vor 11 Jahren
ComboBox SelectedItem refreshen

Ich habe eine ComboxBox und an eine TextBox an Daten gebunden (Entity Framework). Leider wird der anzuzeigende Text in der ComboBox nicht automatisch aktualisiert. Ideal wäre natürlich, dass bei Eingabe in der TextBox der Text automatisch in der ComboBox aktualisiert wird. Wie kann ich das machen?


        <ComboBox ItemsSource="{Binding ClubCollection}" SelectedItem="{Binding SelectedItem}" IsEnabled="{Binding SelectedItem.IsValid}">
            <ComboBox.ItemTemplate>
                <DataTemplate>
                    <TextBlock Text="{Binding Name}"/>
                </DataTemplate>
            </ComboBox.ItemTemplate>
        </ComboBox>

        <TextBox Text="{Binding SelectedItem.Name, ValidatesOnDataErrors=True, UpdateSourceTrigger=PropertyChanged}" IsEnabled="{Binding IsSelected}"/>

849 Beiträge seit 2006
vor 11 Jahren

Hallo,

ich würde vermuten, das das schon von Haus aus Funktioniert wenn Du INotifyPropertyChanged implementiert hast, und dort wo Du tippst das Binding auf Mode=TwoWay einstellst.

C
Cannon Themenstarter:in
282 Beiträge seit 2008
vor 11 Jahren

Geht so leider auch nicht. Vermutlich sollte es gehen, wenn ich ein PropertyChanged der Collection sende, wenn das PropertyChanged an der TextBox ausgelöst wird.Wäre das die Richtige Lösung oder geht es auch anders?

5.299 Beiträge seit 2008
vor 11 Jahren

Das geht mit IsSynchronisizedWithCurrentItem.

gugge 4ViewsWpf

Der frühe Apfel fängt den Wurm.

C
Cannon Themenstarter:in
282 Beiträge seit 2008
vor 11 Jahren

Das "IsSynchronisizedWithCurrentItem" macht doch nichts anderes als das CurrentItem immer mit der angebundenen Quelle, also in meinem Fall der ICollectionView zu synchronisieren.

Ich habe aber das Problem, dass ich so ein DetailView habe und die Details bearbeiten will. In diesem Fall ist hier "Name" der "DisplayMember" und wenn ich diese ändere soll das auch in der ComboBox zu sehen sein - idealerweise direkt bei der Eingabe. Es geht aber nicht - erst nach einem kompletten Reload.

K
19 Beiträge seit 2009
vor 11 Jahren

Hi Cannon.

Ich weiß nicht, ob das die Lösung ist, die du dir vorgestellt hast. Hier ist mein Vorschlag:


private int selected = 0;
        public MainWindow()
        {
            InitializeComponent();
            cb.Items.Add("Text");
            cb.Items.Add("Text Test");
            cb.SelectedIndex = 0;
            this.tb.Text = cb.SelectedItem.ToString();
        }

        private void tb_TextChanged(object sender, TextChangedEventArgs e)
        {
            if (cb.Items.Count > 0)
            {
                if (cb.SelectedIndex < 0)
                {
                    cb.SelectedIndex = 0;
                }
                selected = cb.SelectedIndex;
                cb.Items[selected] = this.tb.Text;
                cb.SelectedIndex = selected;
            }
        }

        private void cb_SelectionChanged(object sender, SelectionChangedEventArgs e)
        {
            if (cb.SelectedIndex >= 0)
            {
                this.selected = cb.SelectedIndex;
                this.tb.Text = cb.Items[selected].ToString();
            }
        }