WPF文本块转换问题

3

我在用户控件中使用文本块,但是我需要从其他表单向文本块发送值。当我传递一些值时,它会在文本块中显示,但我需要将数字转换为文本。因此,我在文本块中使用了转换器,但它没有起作用。

 <TextBlock Height="21" Name="txtStatus" Width="65" Background="Bisque" TextAlignment="Center" Text="{Binding Path=hM1,Converter={StaticResource TextConvert},Mode=OneWay}"/>

转换器类
class TextConvert : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {

        if (value != null)
        {
            if (value.ToString() == "1")
            {
                return value = "Good";

            }
            if (value.ToString() == "0")
            {
                return value = "NIL";

            }

       }
        return value = "";
    }
    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
    {
        return (string)value;
    }

}

这是正确的吗?它有什么问题吗?


是的,我想知道输出结果...看起来没问题。 - VoodooChild
是的,我在文本块中得到了数字,这些值为0和1,如果是0,将绑定一些文本作为相同的1,一些文本,我在文本块中获取数字值,但转换器无法替换文本中的数字。 - Spen D
3个回答

4

好的,我认为我知道问题出在哪里了 - 让我们看看我是否能够为您定义它 :)

在您想要使用TextConvert的xaml文件中,为其定义资源(除非您已经这样做,否则我不知道为什么它不起作用)

    <Grid.Resources>
        <Shared:TextConvert x:Key="TextConvertKey" />
    </Grid.Resources>

这里的“shared”是指xmlns。

在文本框中使用它的方式如下:

Text="{Binding Path=hM1,Converter={StaticResource TextConvertKey},Mode=OneWay}"/>

编辑:

如果您在转换器类中设置断点,调试器会进入吗?

编辑2:

我像使用巫术一样使用它

local:TextConvert x:Key="TextConvert"

这是绝对错误的。当转换器名称为TextConvert时,如何称其为HealthTextConvert?

应该是

local:TextConvert x:Key="whateverKeyNameYouWant"

并且

在文本框中应该是

Text="{Binding Path=hM1,Converter={StaticResource whateverKeyNameYouWant},Mode=OneWay}"

让我看看 hM1 是什么样子? - VoodooChild
我是这样使用的 voodoo <UserControl.Resources> <local:HealthTextConvert x:Key="TextConvert"/> </UserControl.Resources> - Spen D
不要忘记在你的XAML顶部指定本地命名空间 ;) - Arcturus
没有,我做得没错,但是转换仍然不起作用,像巫术一样。不知道为什么。 - Spen D
转换器所在的文件名和命名空间是什么?你本地的xmlns是什么? - VoodooChild
显示剩余7条评论

1
我立即发现您的转换器定义存在问题。
class TextConvert : IValueConverter
{
    ...

应该声明为公共的,才能将其用作资源。

public class TextConvert : IValueConverter
{
    ...

此外,这样做并不是一件好事...

return value = "Good";

...

return value = "NIL";

应该只是这样(即使您不理会它也没关系,只是糟糕的编程=P):

return "Good";

...

return "Nill";

0

尝试通过移除下面一行中的Path来解决问题。

Text="{Binding **Path**=hM1,Converter={StaticResource TextConvert},Mode=OneWay}".

有时候它可以在没有 Path 的情况下工作 :).
同时查看输出窗口(Alt+Cntl+O)...以查看问题所在。

Deep,你得到答案了吗? - Relativity
命名空间应该像这样 - xmlns:Model="clr-namespace:WpfControlLibrary2.ViewModel",并且该命名空间中的类应该如下所示使用 - <ObjectDataProvider x:Key="Datas" ObjectType="{x:Type ViewModel:UserControlViewModel}"></ObjectDataProvider> - Relativity
使用ObjectDataProvider...您可以将类的实例作为静态资源。 - Relativity
很抱歉,那是我的错误 :(请查看以下链接 - http://blogs.msdn.com/b/bencon/archive/2006/05/10/594886.aspx - Relativity

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接