在 ConvertBack() 方法中获取 WPF 绑定中 IValueConverter 实现的 Source 值

2023-11-27

我将依赖属性绑定到 WPF 中的 textboxex。该属性是一个字符串,其中一些值由“/”分隔(例如:“1/2/3/4”)。我需要将各个值绑定到单独的文本框,这对于以下实现来说很好Convert() method:

public object Convert(object value, Type targetType, object parameter,System.Globalization.CultureInfo culture)
{
  if (!string.IsNullOrEmpty(value as string))
  {
    String[] data = (value as string).Split('/');
    return data[Int16.Parse(parameter as string)];
  }
  return String.Empty;
}

我正在使用ConverterParameter in xaml指定所需值的位置。 然而,问题在于ConvertBack()方法。我不知道如何获取源值,以便我可以仅添加或更改字符串中的一个值(在指定位置)。

谢谢你的帮助。


Update

您可能已经在以下人员的帮助下解决了您的问题Vlad,我只是想我应该添加另一种方法来实际获取转换器中的源值。

首先你可以让你的转换器派生自DependencyObject因此您可以向其添加一个我们将绑定到的依赖属性

public class MyConverter : DependencyObject, IValueConverter
{
    public static DependencyProperty SourceValueProperty =
        DependencyProperty.Register("SourceValue",
                                    typeof(string),
                                    typeof(MyConverter));
    public string SourceValue
    {
        get { return (string)GetValue(SourceValueProperty); }
        set { SetValue(SourceValueProperty, value); }
    }

    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        //...
    }
    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
    {
        object targetValue = value;
        object sourceValue = SourceValue;
        //...
    }
}

不幸的是,转换器没有DataContext所以绑定不能开箱即用,但你可以使用 Josh Smith 的优秀DataContextSpy: WPF 中的人工继承上下文

<TextBox>
    <TextBox.Resources>
        <src:DataContextSpy x:Key="dataContextSpy" />
    </TextBox.Resources>
    <TextBox.Text>
        <Binding Path="YourProperty"
                 ConverterParameter="1">
            <Binding.Converter>
                <src:MyConverter SourceValue="{Binding Source={StaticResource dataContextSpy},
                                                       Path=DataContext.YourProperty}"/>
            </Binding.Converter>
        </Binding>
    </TextBox.Text>
</TextBox>

更新结束

Dr.WPF对此有一个优雅的解决方案,请参阅以下线程
如何在ConvertBack()中访问绑定源?

Edit

使用 Dr.WPF 的解决方案,您可以提供字符串索引和源TextBox使用此(可能有点冗长)示例代码发送到转换器

<TextBox dw:ObjectReference.Declaration="{dw:ObjectReference textBoxSource}">
    <TextBox.Text>
        <Binding Path="YourStringProperty"
                 Converter="{StaticResource YourConverter}">
            <Binding.ConverterParameter>
                <x:Array Type="sys:Object">
                    <sys:Int16>1</sys:Int16>
                    <dw:ObjectReference Key="textBoxSource"/>
                </x:Array>
            </Binding.ConverterParameter>
        </Binding>
    </TextBox.Text>
</TextBox>

然后您可以稍后访问索引和TextBox在ConvertBack方法中

public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
    object[] parameters = parameter as object[];
    short index = (short)parameters[0];
    object source = (parameters[1] as TextBox).DataContext;
    //...
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 ConvertBack() 方法中获取 WPF 绑定中 IValueConverter 实现的 Source 值 的相关文章

随机推荐

  • 访问基本过滤器 Play Framework 2 中的请求正文

    我是斯卡拉新手 正如play框架官方文档中提到的https www playframework com documentation 2 3 x ScalaHttpFilters Play 提供了一个名为 EssentialFilter 的较
  • 构造函数可以是异步的吗?

    我有一个项目 我试图在构造函数中填充一些数据 public class ViewModel public ObservableCollection
  • 如何处理 Java/Android 中的慢速网络连接

    我有一个应用程序需要多次调用 MySQL 数据库 它在一个AsyncTask 下面是一个可能看起来像的示例 我的主要问题是这样的 有时 主机 Godaddy 呃 决定停止连接 而我的progressDialog加载 加载 加载更多 直到强行
  • 如何在android中使用SearchView小部件时突出显示过滤后的文本

    我已经实施了SearchView我的应用程序中的小部件 它工作正常 现在我需要做的是 每当我在我的SearchView Bar 过滤结果应突出显示搜索的单词 喜欢 我正在用这个搜索视图小部件为 Override public void on
  • Twitter:在 C# 中验证用户名和密码

    赏金问题 我正在使用 c 3 5 窗口窗体应用程序 我正在使用已接受的答案中提到的代码 我收到以下错误 远程服务器返回错误 401 未经授权 验证用户名和密码的示例代码将非常感激 赏金问题结束 我有一个具有以下用例的应用程序 当用户第一次开
  • 打算在Android上启动时钟应用程序

    我制作的时钟小部件遇到问题 我希望用户触摸时钟并启动手机上的时钟应用程序 这是代码 this worked on my nexus 2 1 if VERSION SDK equals 7 RemoteViews views new Remo
  • QML 条件绑定未按预期工作

    如果我有一个简单的Binding形式的对象 Rectangle height 400 width 500 property var someObj null Binding on color when someObj value someO
  • TypeError:只能将 str (不是“NoneType”)连接到 str

    尝试在 Python 3 7 中构建一个大写到小写的字符串转换器 这是我的代码 def convertChar char if char gt A and char lt Z return chr ord char 32 def toLow
  • 如果刷新 AJAX 请求的内容 (ob_flush),内容会被加载吗?

    我的意思是 让我们发出一个 AJAX 请求并将结果插入到 div result 中 在后端脚本使用ob flush 发送标头 但在请求终止之前不终止请求 使用exit or ob flush end 仅当请求终止时 内容才会加载到 resu
  • Unity中序列化和反序列化Json和Json数组

    我有一个从 PHP 文件发送到 unity 的项目列表WWW The WWW text好像 playerId 1 playerLoc Powai playerId 2 playerLoc Andheri playerId 3 playerL
  • 根据 的状态设置

    仅使用 CSS 是否可以根据输入的状态来设置 HTML 标签的样式 就我而言 我想要设计一个
  • 按第二项(整数值)对元组列表进行排序[重复]

    这个问题在这里已经有答案了 我有一个元组列表 看起来像这样 abc 121 abc 231 abc 148 abc 221 我想按元组内的整数值升序排列此列表 是否可以 尝试使用key的关键字参数sorted 默认按升序排序 sorted
  • 球拍博士中的 mcons

    我在读取球拍博士的输出时遇到问题 默认情况下 它使用 mcons 显示列表 例如 sicp 练习 2 32 生成 gt subsets list 1 2 3 mcons mcons mcons mcons 3 mcons mcons 2 m
  • 通过 Xpath 查找包含文本的元素

    如果我搜索单个字符串 这效果很好 var element Driver FindElement By XPath a contains text About us 但我可以有一个or语句如下面的示例所示 var element Driver
  • 一个视图控制器中的两个 TableView [重复]

    这个问题在这里已经有答案了 我有一个按钮和两个按钮tableViewControllers在一个视图控制器中 因此 如果我按下该按钮 第一个表视图控制器将出现 并且它将按行显示一些数据 如果我选择第一个表视图控制器中的任何行 第二个表视图控
  • 使用 Yii 重定向访问规则

    我正在做一个需要身份验证的应用程序 在应用程序的索引页面中 我指定了这样的访问规则 public function accessRules return array array deny actions gt array index reg
  • iPhone - 如何从应用程序保存用户设置?

    将 iPhone 应用程序中的几个变量保存到长期内存中的最简单方法是什么 我有一个可与不同 sqlite 数据库配合使用的应用程序 我希望在退出应用程序后保存最后一个活动数据库名称 以便在用户再次进入应用程序时打开最后一个数据库 为此目的创
  • 为什么此 F# 函数需要括号?

    为什么需要括号read rest of csv below let read rest of csv csv data Add csv fileH ReadFields gt ignore not csv fileH EndOfData w
  • WPF ListView 对列单击进行排序

    我有一个列表视图 其中的项目在运行时以具有单列 多列的网格形式添加 现在我需要让排序工作 一旦列表视图中有项目并且他们单击该列 它应该在该列上对其进行排序 下面是列表视图的代码
  • 在 ConvertBack() 方法中获取 WPF 绑定中 IValueConverter 实现的 Source 值

    我将依赖属性绑定到 WPF 中的 textboxex 该属性是一个字符串 其中一些值由 分隔 例如 1 2 3 4 我需要将各个值绑定到单独的文本框 这对于以下实现来说很好Convert method public object Conve