【问题标题】:WPF Listview binding not working with DictionaryWPF Listview 绑定不适用于字典
【发布时间】:2018-07-26 09:49:00
【问题描述】:

我有一个 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 然后重新分配 List 值的 Itemsource 它正在工作,否则无法正常工作,有人可以帮忙吗? lvAlphaKeys.ItemSource = null; lvAlphaKeys..ItemSource = viewModel.AlphaKeys;

【问题讨论】:

    标签: c# .net wpf


    【解决方案1】:

    你为AlphaKeys设置了事件,如果集合发生了变化,它会引发一个事件,而不是他的项目。

    你必须为你的MyCommand设置INotifyPropertyChanged

     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));
                }
            }
        }
    

    【讨论】:

    • 谢谢。你能标记我的答案吗?一个upvote将使我的一天:)
    • 完成 :) 再次感谢您的快速帮助
    猜你喜欢
    • 2011-01-23
    • 2016-11-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多