ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

CodeGo.net>与用户控件的双向绑定

2019-12-09 22:05:17  阅读:219  来源: 互联网

标签:binding user-controls xaml c silverlight


我试图在我创建的UserControl上设置双向绑定.

当我在Xaml中使用控件时,像这样设置DataContext …

<uc:MyUserControl DataContext="{Binding Path=MyObject, Mode=TwoWay}" />

我的用户控件定义如下:

<UserControl x:Class="SilverlightApplication1.XText"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    mc:Ignorable="d"
    d:DesignHeight="300" d:DesignWidth="400">

    <Grid x:Name="LayoutRoot" Background="White">
        <TextBox x:Name="Text" Text="{Binding}"/>

    </Grid>
</UserControl>

数据正确显示,但是,如果我进行更改,则希望通过TwoWay绑定进行更新.

我在下面尝试过此方法,但由于未定义路径,因此在运行时会出错.

    <Grid x:Name="LayoutRoot" Background="White">
        <TextBox x:Name="Text" Text="{Binding Mode=TwoWay}"/>

    </Grid>
</UserControl>

关于如何使用户控件内部的控件双向绑定到DataContext的任何想法?

解决方法:

尽管您上面的问题(自动回答)似乎可以解决问题,但我不禁认为这是一个问题领域的问题.我很难思考为什么您首先要像那样直接绑定,特别是因为它使您对数据发生的情况的控制较少.

采取以下措施:

<UserControl 
    x:Class="SilverlightApplication1.XText"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    mc:Ignorable="d"
    x:Name="UserControl"
    d:DesignHeight="300" 
    d:DesignWidth="400">

    <Grid x:Name="LayoutRoot" Background="White">
        <TextBox x:Name="Text" Text="{Binding Path=Value, ElementName=UserControl, Mode=TwoWay}"/>    
    </Grid>
</UserControl>

然后在后面的代码中:

public partial class XText
{
    public static DependencyProperty ValueProperty =
        DependencyProperty.Register(
            "Value",
            typeof(string),
            typeof(XText),
            new FrameworkPropertyMetadata(null)
        );

    public string Value
    {
        get { return ((string)(base.GetValue(XText.ValueProperty))); }
        set { base.SetValue(XText.ValueProperty, value); }
    }

    ...
}

然后,当您准备使用它时:

<uc:XText Value="{Binding Path=MyObject, Mode=TwoWay}" />

是的,它是更多的代码,但是它使您可以更好地控制UserControl内部的Value所发生的情况,并使将来使用此代码更加简单.

有什么想法吗?

-道格

编辑:修复了一些错字.

标签:binding,user-controls,xaml,c,silverlight
来源: https://codeday.me/bug/20191209/2097269.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有