DependencyProperty数据绑定

时间:2011-08-05 13:43:55

标签: c# wpf xaml data-binding

我尝试将我的UI绑定到自定义DependencyProperty:

<Window.Resources>
    <local:Localization x:Key="Localization" xmlns:x="#unknown" xmlns:local="#unknown"/>
</Window.Resources>
    <Grid Name="mainStack" DataContext="{StaticResource Localization}">
         <Button Padding="10,3" Margin="5" Content="{Binding BtnAdd}" Command="New"/>
    </Grid>

我也有“本地化”课程:

class Localization : DependencyObject, INotifyPropertyChanged
    {
        public static DependencyProperty BtnAddProperty;

        static Localization()
        {
            BtnAddProperty = DependencyProperty.Register("BtnAdd", typeof(string), typeof(Localization));

        }

        public string BtnAdd
        {
            set
            {
                SetValue(BtnAddProperty, value);
            }
            get
            {
                return (string)GetValue(BtnAddProperty);
            }
        }

        public event PropertyChangedEventHandler PropertyChanged;

        protected virtual void OnPropertyChanged(string propertyName)
        {
            PropertyChangedEventHandler handler = this.PropertyChanged;
            if (handler != null)
            {
                PropertyChangedEventArgs e = new PropertyChangedEventArgs(propertyName);
                handler.Invoke(this, e);
            }
        }

        public Localization()
        {
            BtnAdd = MainWindowRes.BtnAdd;
        }

        public void SwitchLanguage()
        {
            BtnAdd = MainWindowRes.BtnAdd;
            OnPropertyChanged("BtnAdd");
        }

    }

我的UI元素第一次获取属性值。但是当我使用我的方法SwitchLanguage()时,属性获取新数据,并且UI仍然具有第一个值。

有人能帮助我吗?

P.S。 对不起,我的英文。

Eugene

2 个答案:

答案 0 :(得分:2)

我试过你的例子,一切似乎都有效 但是有一些陷阱:

  • 有一个名为Localization的框架类,所以请确保你不要混淆!
  • 您如何致电SwitchLanguage()?你必须在正确的实例上调用它! (例如,在守则背后:

    var res =(本地化)资源[“本地化”];
    res.SwitchLanguage();

答案 1 :(得分:0)

无法真正发现任何会导致绑定不更新的错误,但还有其他一些事情需要修复,DP字段应该是只读的,你不应该为DP调用任何属性更改通知,因为它们有通知的内部机制(在SetValue内)。

您确定MainWindowRes.BtnAdd的值在SwitchLanguage中与构造函数中的值有什么不同吗?