WPF Listview绑定不使用Dictionary

问题描述 投票:0回答:1

我有一个WPF项目,在XAML文件中我有一个listview并绑定到字典。但每当我更改字典值的值时,它都不会绑定回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;

c# .net wpf
1个回答
1
投票

您为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));
            }
        }
    }
© www.soinside.com 2019 - 2024. All rights reserved.