繁体   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