我的绑定转换有什么问题?

时间:2011-06-22 13:39:18

标签: wpf silverlight

我有一些包含List

的接口和类
public interface IListContain
{
    Int32 ItemCount
    {
        get;
    }
}

public class myStackPanel : StackPanel, IListContain
{

    ... // implimentation ... 
}

我想在一些TextBlock和对象实例myStackPanel上的'指向'变量之间进行绑定 - 所以我写的是这样的

XAML:

                                                                      

                <TextBlock x:Name="ItemCount" FontSize="12" Text="{Binding ElementName=ListContainObject, Path=ItemCount,Converter={StaticResource IntConverter}}" />

转换代码(int to string)

 public class IntToStringConverter : IValueConverter
{        
    public object Convert( object value, Type targetType, object parameter, CultureInfo culture )
    {
        return ( ( int )value ).ToString();
    }

    public object ConvertBack( object value, Type targetType, object parameter, CultureInfo culture )
    {
        int result;
        var succes = int.TryParse( ( string )value, out result );
        return succes ? result : 0;
    }
}

在xaml的cs文件中,我在构造函数中定义了

      DataContext = this;

但仍然 - 没有任何作用! 我没有火灾转换事件!

我不知道我做错了什么。

请帮忙......

感谢。 (此代码在silverlight中,ListContainObject不为null ......它在真实对象上的点)

3 个答案:

答案 0 :(得分:2)

如果没有向我们展示您的实施,则无法肯定地说,但您可能没有使用ItemCount /已实施INotifyPropertyChanged的依赖属性。因此,WPF不知道属性何时发生变化,UI也不会相应更新(也不会更新冗余转换器)。

答案 1 :(得分:0)

您在绑定中使用ElementName - 这必须解析为xaml文件中列出的对象的“name”字段 - 我不确定您的代码是否就是这种情况。例如,如果你的xaml中有一个名为“my_listbox”的ListBox控件,那么你可以将你的绑定设置为icnlude ElementName =“my_listbox”,但你在这里描述它的方式我感觉你的ListContainObject在某处被声明了代码背后?

答案 2 :(得分:0)

绑定int时,您不需要字符串转换器,因为自动完成。可能你的问题是你没有x:Name="ListContainObject"

的任何元素