none
WPF XAML中声明DataContext的时候,如何传参? RRS feed

  • 问题

  • 我最近开始学习WPF技术。

         现在遇到一个问题:

         在我的Window的xaml中我要声明一个类来作为该Window的数据上下文(DataContext),我写在xaml中的目的是为了更好的将View和Model分离。(我在项目里使用了 Prism框架来做MVVM模式)

         代码如下:

    <Window x:Class="LoginView.SystemWindow.LoginShell"
            xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
            xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
            xmlns:VM="clr-namespace:ViewModel.LoginViewModel;assembly=ViewModel"
            Title="登录" Height="300" Width="370" WindowStyle="None" AllowsTransparency="True" 
    
    ResizeMode="NoResize" MouseLeftButtonDown="Window_MouseDown"  Background="Transparent" 
    
    WindowStartupLocation="CenterScreen" >
    
        <Window.DataContext>
            <VM:LoginVM/>  --->就是这里,我该如何传参数      
    
    </Window.DataContext>
    
    </Window>
    

    上面的xaml代码里 在声明Window.DataContext的时候,我该如何传参给  LoginVM(object obj) { } 构造函数???

    注意:我的 LoginVM类是放在另一个项目ViewModel里的(名称空间:ViewModel.LoginViewModel.LoginVM)!!!!

    !!


    欢迎交流指教 MSN:mangonic@hotmail.com

    2013年2月5日 5:34

答案

  • 一般没有在这里放一个TextBox的。

    至于如何传参数, 其实xaml和后台代码没有什么太大区别, 你就正常赋值就行,给你举个例子:

    public class LoginVM
    {
        public object myTextBox { get; set; }
    }

    <Window.Resources>
        <local:LoginVM x:Key="loginVM">
            <local:LoginVM.myTextBox>
                <TextBox Text="AAA"/>
            </local:LoginVM.myTextBox>
        </local:LoginVM>
    </Window.Resources>
         
    
    <ContentControl Content="{Binding Source={StaticResource loginVM}, Path=myTextBox}"/>

    Best regards,


    Sheldon _Xiao
    MSDN Community Support | Feedback to us
    Develop and promote your apps in Windows Store
    Please remember to mark the replies as answers if they help and unmark them if they provide no help.

    2013年2月6日 7:04
    版主

全部回复

  • LZ还是把ViewModel的构造函数去掉,用属性传参吧

    虽然Xaml有办法可以给调用含参的构造函数(参考:http://msdn.microsoft.com/zh-cn/library/ee795382%28v=vs.100%29.aspx),但这有个问题——需要被编译成Baml的Xaml文件不支持这个功能,只有动态加载非编译的Xaml文件才可以


    • 已编辑 MoreMoen 2013年2月5日 11:02
    2013年2月5日 11:00
  • LZ还是把ViewModel的构造函数去掉,用属性传参吧

    虽然Xaml有办法可以给调用含参的构造函数(参考:http://msdn.microsoft.com/zh-cn/library/ee795382%28v=vs.100%29.aspx),但这有个问题——需要被编译成Baml的Xaml文件不支持这个功能,只有动态加载非编译的Xaml文件才可以


    你好,谢谢你的帮助。

    你说的属性传参,是什么意思,怎么做,我初学WPF,很多东西都不懂,能说具体一点吗?

    谢谢啦!


    欢迎交流指教 MSN:mangonic@hotmail.com

    2013年2月6日 1:09
  • 你说的属性传参,是什么意思,怎么做,我初学WPF,很多东西都不懂,能说具体一点吗?

    谢谢啦!


    就是把这个

    class LoginVM
    {
        public LoginVM(object obj) { /* XXX */ }
    
        //其它代码
    }

    换成

    class LoginVM
    {
        public object Obj { get; set; }
    
        public LoginVM() { /* XXX */ }
    
        //其它代码
    }

    在Xaml里就这样写

    <VM:LoginVM Obj="XXX" />

    2013年2月6日 5:12
  • 你说的属性传参,是什么意思,怎么做,我初学WPF,很多东西都不懂,能说具体一点吗?

    谢谢啦!


    就是把这个

    class LoginVM
    {
        public LoginVM(object obj) { /* XXX */ }
    
        //其它代码
    }

    换成

    class LoginVM
    {
        public object Obj { get; set; }
    
        public LoginVM() { /* XXX */ }
    
        //其它代码
    }

    在Xaml里就这样写

    <VM:LoginVM Obj="XXX" />

    你好,

    现在按照你的方式改了之后,我的xaml里又出现了之前的那个问题:http://social.msdn.microsoft.com/Forums/zh-CN/wpfzhchs/thread/7ee481e6-eefc-458d-9a55-837e183d57a2

    另外,我在<VM:LoginVM Obj="XXX" /> 这里怎么传一个控件,比如TextBox ???

    能不能加你的MSN,希望与你交流,

    谢谢!


    欢迎交流指教 MSN:mangonic@hotmail.com

    2013年2月6日 6:46
  • 一般没有在这里放一个TextBox的。

    至于如何传参数, 其实xaml和后台代码没有什么太大区别, 你就正常赋值就行,给你举个例子:

    public class LoginVM
    {
        public object myTextBox { get; set; }
    }

    <Window.Resources>
        <local:LoginVM x:Key="loginVM">
            <local:LoginVM.myTextBox>
                <TextBox Text="AAA"/>
            </local:LoginVM.myTextBox>
        </local:LoginVM>
    </Window.Resources>
         
    
    <ContentControl Content="{Binding Source={StaticResource loginVM}, Path=myTextBox}"/>

    Best regards,


    Sheldon _Xiao
    MSDN Community Support | Feedback to us
    Develop and promote your apps in Windows Store
    Please remember to mark the replies as answers if they help and unmark them if they provide no help.

    2013年2月6日 7:04
    版主
  • 你好,谢谢你的解答。

    由于我需要对 PasswordBox控件做依赖属性绑定,所以我要把PasswordBox控件传到 LoginVM类里做一些依赖属性的绑定。


    欢迎交流指教 MSN:mangonic@hotmail.com

    2013年2月6日 7:25
  • 我的上个回复回答的你原始的问题(如何设置参数)。

    --〉由于我需要对 PasswordBox控件做依赖属性绑定,所以我要把PasswordBox控件传到 LoginVM类里做一些依赖属性的绑定。

    关于你的这部分 我没发现有问题,所以我不知道怎么回答,不过根据我的经验,你这么做有点奇怪,如果你这么做遇到了新的问题,需要进一步讨论, 我建议你开个新的帖子,在哪里讨论新的问题。


    Sheldon _Xiao
    MSDN Community Support | Feedback to us
    Develop and promote your apps in Windows Store
    Please remember to mark the replies as answers if they help and unmark them if they provide no help.

    2013年2月6日 9:33
    版主