【问题标题】:Nested class' property not visible in ListView after assignment赋值后,嵌套类的属性在 ListView 中不可见
【发布时间】:2015-10-30 19:58:41
【问题描述】:

我有一个包含两个嵌套类的类。两个嵌套类的属性都应显示在 WPF ListView 中。创建 ListView 时,第二个嵌套类 (BClass) 为空。按下按钮后(例如) BClass 得到一个值。 我的问题是 ListView 没有用这个新值更新。

非常感谢您的帮助。谢谢。

这是我快速而肮脏的示例代码(来自 Caliburn Micro 的 PropertyChangedBase):

namespace WpfApplication1
{
    public class AClass : PropertyChangedBase
    {
        public string prop2;
        public string Prop2
        {
            get { return prop2; }
            set
            {
                prop2 = value;
                NotifyOfPropertyChange("Prop2");
            }
        }
    }

    public class BClass : PropertyChangedBase
    {
        public string prop1;
        public string Prop1
        {
            get { return prop1; }
            set
            {
                prop1 = value;
                NotifyOfPropertyChange("Prop1");
            }
        }
    }

    public class CClass : PropertyChangedBase
    {
        public AClass a;
        public AClass A
        {
            get { return a; }
            set
            {
                a = value;
                NotifyOfPropertyChange("A");
            }
        }
        public BClass b;
        public BClass B
        {
            get { return b; }
            set
            {
                b = value;
                NotifyOfPropertyChange("B");
            }
        }
    }

    public partial class MainWindow : Window
    {
        private List<CClass> cs = new List<CClass>();
        public MainWindow()
        {
            InitializeComponent();
            cs.Add(new CClass { A = new AClass { Prop2 = "WWW" } });
            listView.ItemsSource = cs;
        }

        private void button_Click(object sender, RoutedEventArgs e)
        {
            cs.First().B = new BClass { Prop1 = "EEE" };
        }
    }
}

XAML 代码:

<Grid>
        <ListView x:Name="listView" HorizontalAlignment="Left" Height="248" Margin="63,39,0,0" VerticalAlignment="Top" Width="403">
            <ListView.View>
                <GridView>
                    <GridViewColumn DisplayMemberBinding="{Binding A.Prop2}" />
                    <GridViewColumn DisplayMemberBinding="{Binding B.Prop1}" />
                </GridView>
            </ListView.View>
        </ListView>
        <Button x:Name="button" Content="Button" HorizontalAlignment="Left" Margin="50,298,0,0" VerticalAlignment="Top" Width="75" Click="button_Click"/>

    </Grid>

【问题讨论】:

  • 尝试将您的 ItemSource 绑定到 ObservableCollection 而不是 List。
  • 这些都不是“嵌套”类,它们是CClass 的简单成员属性。
  • 已经尝试过 ObservableCollection 没有成功。

标签: c# wpf listview binding nested


【解决方案1】:

将列表视图绑定到可观察集合

public partial class MainWindow : Window
{
    private ObservableCollection<CClass> cs = new ObservableCollection<CClass>();
    public MainWindow()
    {
        InitializeComponent();
        cs.Add(new CClass { A = new AClass { Prop2 = "WWW" } });
        listView.ItemsSource = cs;
    }
}

【讨论】:

    【解决方案2】:

    我太傻了! 它总是有效的。该列只是没有调整大小,所以我看不到结果。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-03-04
      • 1970-01-01
      • 2012-11-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-09-22
      • 1970-01-01
      相关资源
      最近更新 更多