Xaml绑定无法与Application.Current

时间:2016-06-14 17:26:08

标签: c# wpf xaml binding

所以我在App.xaml.cs中定义了两个全局属性Username和CurrentView,我将它们绑定在我的视图中。

App.xaml.cs

 public partial class App : Application, INotifyPropertyChanged
 {
    public static object username;

    public object Username { get { return username; } set { username = value; } }

    public static Object currentView = new LoginView();

    public object CurrentView
    {
        get { return currentView; }
        set { currentView = value; }
    }

    public event PropertyChangedEventHandler PropertyChanged;

    protected void OnPropertyChanged(string name)
    {
        PropertyChangedEventHandler handler = PropertyChanged;
        if (handler != null)
        {
            handler(this, new PropertyChangedEventArgs(name));
        }
    }
}

我在不同的视图中将它们绑定在一起。 的 MainView.xaml

    <Page  Content="{Binding CurrentView, Source={x:Static Application.Current}}">          
    </Page>

LoginView.xaml

    <TextBox  HorizontalAlignment="Left" Height="23" TextWrapping="Wrap" VerticalAlignment="Top" Width="165" Margin="218,159,0,0" Text="{Binding Path=Username, Source={x:Static Application.Current}, Mode=OneWay, UpdateSourceTrigger=PropertyChanged, NotifyOnSourceUpdated=True, NotifyOnTargetUpdated=True}" />

MainView中的绑定工作得很好。它向我展示了我已经在app.xaml.cs中初始化了CurrentView的LoginView,并且在更改源时它会发生变化。

但是,用户名未更新,与LoginView中的文本框绑定。 似乎无法弄清楚问题。它应该更新为Iv将UpdateSourceTrigger设置为PropertyChanged。

任何帮助将不胜感激:)

1 个答案:

答案 0 :(得分:0)

TextBox的Text属性属于string类型,但您的Username属性为object

考虑将Username属性更改为字符串而不是对象。如果你需要它作为一个对象,你需要有一个转换器,以便绑定正确设置它。

另外,看着你的装订,我注意到你把它设置为OneWay。将其更改为TwoWay以确保Binding从Source和Target更新两种方式。