为了账号安全,请及时绑定邮箱和手机立即绑定

WPF Listview 绑定不适用于字典

WPF Listview 绑定不适用于字典

C#
森栏 2021-10-31 19:06:42
我有一个 WPF 项目,在 XAML 文件中我有一个列表视图并绑定到字典。但是每当我更改字典值的值时,它都不会绑定回 UI。任何人都可以帮忙。我的代码示例如下所示。.XAML 文件:<DockPanel Grid.Row="1" Grid.Column="0">    <Border BorderBrush="SkyBlue" BorderThickness="1,1,1,1"></Border>        <StackPanel>                <ListView Margin="0" ScrollViewer.HorizontalScrollBarVisibility="Hidden" Name="lvAlphaKeys" BorderThickness="0" ItemsSource="{Binding AlphaKeys, Mode=TwoWay}"  >                    <ListView.ItemTemplate>                        <DataTemplate>                            <WrapPanel>                                <TextBlock Text="{Binding Key}" Width="30" FontWeight="Bold" />                                <TextBlock Text="{Binding Value.DispalyName, Mode=TwoWay}" />                            </WrapPanel>                        </DataTemplate>                    </ListView.ItemTemplate>                    </ListView.ItemTemplate>                </ListView>        </StackPanel></DockPanel>查看型号:public class MyViewModel : INotifyPropertyChanged {         public event PropertyChangedEventHandler PropertyChanged;         private Dictionary<string, MyCommand> _AlphaKeys;        public Dictionary<string, MyCommand> AlphaKeys        {            get { return _AlphaKeys; }            set            {                _AlphaKeys = value;                OnPropertyChanged(new PropertyChangedEventArgs("AlphaKeys"));            }        }} public class  MyCommand    {        public string DispalyName { get; set; }        public string DisplaySymbol { get; set; }    }.XaML.CS 文件://Field declaration        MyViewViewModel viewModel;//Constructur     viewModel = new MyViewViewModel();     DataContext = viewModel;   //Event    viewModel.AlphaKeys[key].DispalyName = "new value";如果我设置 itemsource = null 然后重新分配列表值的 Itemsource 它正在工作,否则无法工作,有人可以帮忙吗?lvAlphaKeys.ItemSource = null; lvAlphaKeys..ItemSource = viewModel.AlphaKeys;
查看完整描述

1 回答

?
ABOUTYOU

TA贡献1812条经验 获得超5个赞

您为 设置事件AlphaKeys,如果集合已更改,它将引发一个事件,而不是为他的项目。


你必须INotifyPropertyChanged为你的MyCommand,


 public class  MyCommand : INotifyPropertyChanged

    {

        private string _dispalyName ;

        public string DispalyName 

        {

            get { return _dispalyName ; }

            set

            {

                _dispalyName = value;

                NotifyOfPropertyChange("DispalyName");

            }

        }



        public event PropertyChangedEventHandler PropertyChanged;

        protected void NotifyOfPropertyChange(string name)

        {

            PropertyChangedEventHandler handler = PropertyChanged;


            if (handler != null)

            {

                handler(this, new PropertyChangedEventArgs(name));

            }

        }

    }


查看完整回答
反对 回复 2021-10-31
  • 1 回答
  • 0 关注
  • 256 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信