【问题标题】:C# WPF binding - Combobox selecteditem to Listbox?C# WPF 绑定 - 组合框选择项到列表框?
【发布时间】:2019-12-07 17:57:34
【问题描述】:

我正在尝试绑定一个组合框,它有两个类别(字母 和数字),到一个列表框。

这是 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 绑定有效,但我不知道如何绑定 依赖于选定项的嵌套“值”属性。

ComboBox

也许有人知道如何解决。谢谢!

编辑:

我有一个包含不同产品的库。每个产品都分配给一个类别。最后,用户应该选择一个类别,它的产品将动态显示(在列表框中)。我已经将它排序在一个 observablecollection 中,它的结构与上面的代码相同。

【问题讨论】:

  • 也许一个更好的问题是你到底需要这个绑定什么?最终的结果是什么?

标签: c# wpf user-interface


【解决方案1】:

我终于明白了:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-05
    • 2011-05-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-27
    相关资源
    最近更新 更多