簡體   English   中英

C# WPF 綁定 - 組合框選擇項到列表框?

[英]C# WPF binding - Combobox selecteditem to Listbox?

我正在嘗試將具有兩個類別(字母和數字)的 ComboBox 綁定到列表框。

這是 C# 代碼:

 class LibraryViewModel
{
    public LetterOrNumberList lib { get; }

    public LibraryViewModel()
    {
        lib = new LetterOrNumberList();
    }
}


public class LetterOrNumberList : ObservableCollection<LettersAndNumbers>
{
    public LetterOrNumberList()
    {
        LettersAndNumbers Letters = new LettersAndNumbers();
        Letters.Title = "Letters";
        ObservableCollection<IExample> letters = new ObservableCollection<IExample>();
        letters.Add(new LetterA());
        letters.Add(new LetterB());
        Letters.LetterOrNumber = letters;

        LettersAndNumbers Numbers = new LettersAndNumbers();
        Numbers.Title = "Numbers";
        ObservableCollection<IExample> numbers = new ObservableCollection<IExample>();
        numbers.Add(new Number1());
        numbers.Add(new Number2());
        Numbers.LetterOrNumber = numbers;

        this.Add(Letters);
        this.Add(Numbers);
    }
}

public class LettersAndNumbers
{
    public string Title { get; set; }
    public ObservableCollection<IExample> LetterOrNumber { get; set; }
}

public class LetterA : PropertyChangeClass, IExample
{
    public string value
    {
        get
        {
            return _value;
        }

        set
        {
            _value = value;
            OnPropertyChanged(nameof(value));
        }
    }

    public LetterA()
    {
        value = "A";
    }

    private string _value;
}
public class LetterB : PropertyChangeClass, IExample
{
   //principial the same like class Letter A
   //...
}
public class Number1 : PropertyChangeClass, IExample
{
    //principial the same like class Letter A
    //...
}
public class Number2 : PropertyChangeClass, IExample
{
    //principial the same like class Letter A
    //...
}
public class PropertyChangeClass
{
    public event PropertyChangedEventHandler PropertyChanged;

    protected virtual void OnPropertyChanged(string PropertyName)
    {
        PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(PropertyName));
    }
}
public interface IExample
{
    string value { get; set; }
}

在 XAML 中,我嘗試如下:

<ComboBox Width="100" Name="cBox" Text="Bitte auswählen" ItemsSource="{Binding lib}" DisplayMemberPath="Title"/>
<ListBox Grid.Row="2" ItemsSource="{Binding cBox}" DisplayMemberPath="value"/>

ComboBox 綁定有效,但我不知道如何根據 selecteditem 綁定嵌套的“value”屬性。

組合框

也許有人知道如何解決。 謝謝!

編輯:

我有一個不同產品的庫。 每個產品都分配給一個類別。 最后,用戶應該選擇一個類別,它的產品將被動態顯示(在列表框中)。 我已經在一個 observablecollection 中對它進行了排序,我的結構與上面的代碼相同。

我終於明白了:

<ListBox Grid.Row="2" ItemsSource="{Binding ElementName=cBox, Path=SelectedItem.LetterOrNumber, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}">
        <ListBox.ItemTemplate>
            <DataTemplate>
                <Grid>
                    <TextBlock Text="{Binding Path=value}"/>
                </Grid>
            </DataTemplate>
        </ListBox.ItemTemplate>
    </ListBox>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM