WPF 数据绑定到其他对象的属性

yangguanghu 2013-06-03 12:53:03
基本类的定义如下 , 有一个GameCard 类 里有一个属性Number, 而同时又一个GameCardService 是伽mecard类的集合,现在我在我的主窗体 里 定义了一个GameCardService 的实例 和属性;现在我需要再握得xmal里对一个标签的内容进行绑到Number ,我的写法是这样的

比如第一个标签绑到到 PGameCard[0]的number 写法如下 Path = Number, Source = PGameCard[0]

想请教熟悉的人帮我看看为什么不起作用阿,我希望通过 Source的方式不想通过datacontext的方式;正确的应该是怎么写。。具体的部分代码如下。。



Public GameCardService PGameCard
{
get{
return pGamecard;
}set
{
pGameCard = value;
}
}


================================================

public class GameCard : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;

protected void PropertyChangedNotify(string propName)
{
if (this.PropertyChanged != null)
PropertyChanged(this, new PropertyChangedEventArgs(propName));
}
private String number;
public String Number
{
set
{
Number = value;
}
get
{
return number;
}
}

public GameCard(string _number)
{

number = _number;
}

}

public class GameCardService : ObservableCollection<GameCard>, INotifyPropertyChanged
{
public GameCardService()
: base()
{
for (int i = 0; i < 54; i++) Add(new GameCard(""));

}

public void setNumbers(int[] _Number)
{
for (int i = 0; i < 54; i++)
{
this[i].Number = _Number[i].ToString();
}
}
}
...全文
647 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
木头小菜 2013-06-07
  • 打赏
  • 举报
回复

前台
 <ListView  x:Name="listview">
                    <ListView.ItemTemplate>
                        <DataTemplate>
                            <TextBlock Text="{Binding Path=Number}"/>
                        </DataTemplate>
                    </ListView.ItemTemplate>
                </ListView>
后台
listview.ItemsSource = GameCardService;
yangguanghu 2013-06-07
  • 打赏
  • 举报
回复
引用 4 楼 sp1234 的回复:
我用你的代码给你写个 MVVM 的demo: 首先,是两个Model类
using System;
using System.ComponentModel;

namespace WpfApplication2
{
    public class GameCard : INotifyPropertyChanged
    {
        public event PropertyChangedEventHandler PropertyChanged;

        protected void PropertyChangedNotify(string propName)
        {
            if (this.PropertyChanged != null)
                PropertyChanged(this, new PropertyChangedEventArgs(propName));
        }
        private String number;
        public String Number
        {
            set
            {
                Number = value;
            }
            get
            {
                return number;
            }
        }

        public GameCard(string _number)
        {

            number = _number;
        }

    }

}

using System.Collections.ObjectModel;
using System.ComponentModel;

namespace WpfApplication2
{
    public class GameCardService : ObservableCollection<GameCard>, INotifyPropertyChanged
    {
        public GameCardService()
            : base()
        {
            for (int i = 0; i < 54; i++)
                Add(new GameCard("Number" + i));

        }

        public void setNumbers(int[] _Number)
        {
            for (int i = 0; i < 54; i++)
            {
                this[i].Number = _Number[i].ToString();
            }
        }
    }
}
接下来,因为我们要使用窗体MainWindow来显示它,所以自然地,定义一个对应的VM类

namespace WpfApplication2
{
    public class MainWindowModel
    {
        public MainWindowModel()
        {
            this.PGameCard = new GameCardService();
        }

        public GameCardService PGameCard { get; set; }
    }
}
最后就是最终目的——View类
<Window x:Class="WpfApplication2.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:local="clr-namespace:WpfApplication2"
        Title="MainWindow" Height="350" Width="525">
    <Window.DataContext>
        <local:MainWindowModel />
    </Window.DataContext>
    <Grid>
        <TextBlock Text="{Binding PGameCard[0].Number}" />
    </Grid>
</Window>
我首先会把 MainWindow.xaml.cs 文件删除。因为只有这样,才可以真正比较严格地使用 MVVM 模式。
大哥,你这样绑定的写法,好像我还是不行啊,没法显示唉
  • 打赏
  • 举报
回复
我用你的代码给你写个 MVVM 的demo: 首先,是两个Model类
using System;
using System.ComponentModel;

namespace WpfApplication2
{
    public class GameCard : INotifyPropertyChanged
    {
        public event PropertyChangedEventHandler PropertyChanged;

        protected void PropertyChangedNotify(string propName)
        {
            if (this.PropertyChanged != null)
                PropertyChanged(this, new PropertyChangedEventArgs(propName));
        }
        private String number;
        public String Number
        {
            set
            {
                Number = value;
            }
            get
            {
                return number;
            }
        }

        public GameCard(string _number)
        {

            number = _number;
        }

    }

}

using System.Collections.ObjectModel;
using System.ComponentModel;

namespace WpfApplication2
{
    public class GameCardService : ObservableCollection<GameCard>, INotifyPropertyChanged
    {
        public GameCardService()
            : base()
        {
            for (int i = 0; i < 54; i++)
                Add(new GameCard("Number" + i));

        }

        public void setNumbers(int[] _Number)
        {
            for (int i = 0; i < 54; i++)
            {
                this[i].Number = _Number[i].ToString();
            }
        }
    }
}
接下来,因为我们要使用窗体MainWindow来显示它,所以自然地,定义一个对应的VM类

namespace WpfApplication2
{
    public class MainWindowModel
    {
        public MainWindowModel()
        {
            this.PGameCard = new GameCardService();
        }

        public GameCardService PGameCard { get; set; }
    }
}
最后就是最终目的——View类
<Window x:Class="WpfApplication2.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:local="clr-namespace:WpfApplication2"
        Title="MainWindow" Height="350" Width="525">
    <Window.DataContext>
        <local:MainWindowModel />
    </Window.DataContext>
    <Grid>
        <TextBlock Text="{Binding PGameCard[0].Number}" />
    </Grid>
</Window>
我首先会把 MainWindow.xaml.cs 文件删除。因为只有这样,才可以真正比较严格地使用 MVVM 模式。
yangguanghu 2013-06-03
  • 打赏
  • 举报
回复
大牛帮顶啊 ,着急
yangguanghu 2013-06-03
  • 打赏
  • 举报
回复
绑定, 大牛帮看看啊
Windows Presentation Foundation (WPF) 是.NET Framework 3.0 的关键组件,是支持下一代视窗应用程序表现层编程的平台,也是微软新发布的Vista操作系统的三大核心开发库之一,主要负责图形显示。本书是针对那些对用户界面开发感兴趣的软件开发人员编写的,易于理解,适合那些.NET的新手,并有助于理解像Microsoft Expression Blend这样产品的精髓。   本书适合各层次Web开发人员阅读。 第一部分 背景 第1章 为什么创造WPF    1.1 回顾过去    1.2 步入WPF    1.3 作为.NET Framework的组成部分     1.3.1 为托管代码而设计     1.3.2 强调声明式描述    1.4 小结   第2章 XAML揭秘    2.1 XAML定义    2.2 元素和特性    2.3 命名空间    2.4 属性元素    2.5 类型转换器    2.6 标记扩展    2.7 对象元素的子元素     2.7.1 内容属性     2.7.2 集合项     2.7.3 更多类型转换    2.8 编译:将XAML与过程式代码混合使用     2.8.1 在运行时加载和解析XAML     2.8.2 编译XAML     2.8.3 XAML关键字    2.9 小结     2.9.1 抱怨1:XML太过冗长不便于输入     2.9.2 抱怨2:基于XML的系统性能差   第3章 WPF的重要新概念    3.1 逻辑树与可视树    3.2 依赖属性     3.2.1 依赖属性的实现     3.2.2 变更通知     3.2.3 属性值继承     3.2.4 对多个提供程序的支持     3.2.5 附加属性    3.3 路由事件     3.3.1 路由事件的实现     3.3.2 路由策略和事件处理程序     3.3.3 路由事件实践     3.3.4 附加事件    3.4 命令     3.4.1 内建命令     3.4.2 使用输入手势执行命令     3.4.3 带有内建命令绑定的控件    3.5 漫游类层次    3.6 小结  第二部分 构建WPF应用程序  第4章 WPF控件   第5章 尺寸缩放、定位与变换元素   第6章 使用面板做布局   第7章 构建并部署应用程序  第三部分 为专业开发人员设计的功能  第8章 资源   第9章 数据绑定   第10章 样式、模板、皮肤和主题 233 第四部分 通过富媒体使程序领先于时代  第11章 2D图形   第12章 3D图形   第13章 动画   第14章 音频、视频、语音和文档  第五部分 高级主题  第15章 与Win32、Windows Form以及ActiveX之间的互用性   第16章 用户控件和自定义控件   第17章 使用自定义面板做布局  第六部分 附录 附录 有用的工具 

110,536

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧