WPF中,多key值绑定问题,一个key绑定一个界面上的对象

简介: 原文:WPF中,多key值绑定问题,一个key绑定一个界面上的对象问题说明: 当用到dictionary来储存数据的时候,有时候需要在界面上绑定一个key来显示value,这时候有两种思路: 一种是写一个自定义的扩展类,类似Binding,这里取名为“MyBinding”,在binding类内部实现key的绑定。
原文: WPF中,多key值绑定问题,一个key绑定一个界面上的对象

问题说明:

当用到dictionary<key,value>来储存数据的时候,有时候需要在界面上绑定一个key来显示value,这时候有两种思路:

一种是写一个自定义的扩展类,类似Binding,这里取名为“MyBinding”,在binding类内部实现key的绑定。

另一种更简洁,更通用的方法是用索引实现绑定。属性能够绑定到界面,同样的索引也能绑定到界面。

实现代码如下:

1.自定义MarkupExtension,

using System;
using System.Windows.Data;
using System.Windows.Markup;

namespace 索引绑定
{
    public class MyBinding : MarkupExtension
    {
        public int key { get; set; }


        public override object ProvideValue(IServiceProvider serviceProvider)
        {
            var b = new Binding("Value");
            b.Source = ViewModelNomal.Instance.li[key];
            return b.ProvideValue(serviceProvider);
        }
    }
}

  2.索引绑定

    public class ModelUseIndexer : INotifyPropertyChanged
    {
        private readonly Dictionary<int, int> _localDictionary = new Dictionary<int, int> ();

        [IndexerName("Item")]
        public int this[int index]
        {
            get
            { 
                int result;
                _localDictionary.TryGetValue(index, out result);
                return result;
            }
            set
            {
                if (_localDictionary.ContainsKey(index))
                    _localDictionary[index] = value;
                else
                    _localDictionary.Add(index, value);
                if (PropertyChanged != null)
                    PropertyChanged(this, new PropertyChangedEventArgs("Item[]"));
            }
        }


        public event PropertyChangedEventHandler PropertyChanged;
    }

  

运行效果是一样的,但索引绑定依赖代码性更少,更符合oop的思想。

源码地址:https://files.cnblogs.com/files/lizhijian/%E7%B4%A2%E5%BC%95%E7%BB%91%E5%AE%9A.rar

谢谢阅读,希望可以帮助到你。

目录
相关文章
WPF—多重绑定和跨层级绑定
WPF—多重绑定和跨层级绑定
|
C# 数据格式 XML
WPF 资源(StaticResource 静态资源、DynamicResource 动态资源、添加二进制资源、绑定资源树)
原文:WPF 资源(StaticResource 静态资源、DynamicResource 动态资源、添加二进制资源、绑定资源树) 一、WPF对象级(Window对象)资源的定义与查找 实例一: StaticR...
8247 0
|
12月前
|
C# 数据库
WPF中DataGrid控件绑定数据源
WPF中DataGrid控件绑定数据源
140 0
|
C# Windows
一个WPF开发的、界面简洁漂亮的音频播放器
一个基于C# + WPF开发的,界面外观简洁大方,操作体验良好的音频播放器。
98 0
|
C#
WPF更新绑定字段
WPF更新绑定字段
83 0
WPF界面无法正常显示(资源引用,如转换器),但程序正常运行
WPF界面无法正常显示(资源引用,如转换器),但程序正常运行
WPF界面无法正常显示(资源引用,如转换器),但程序正常运行
|
前端开发 C#
WPF 之 数据与命令绑定 (MVVM方式)
WPF 之 数据与命令绑定 (MVVM方式)
179 0
WPF 之 数据与命令绑定 (MVVM方式)
|
前端开发 C#
WPF MVVM 如何在 ViewModel 中关闭界面窗口
WPF MVVM 如何在 ViewModel 中关闭界面窗口
WPF界面异常:未将对象引用设置到对象实例
WPF界面异常:未将对象引用设置到对象实例