2017-08-06 95 views
0

我对WPF很陌生,我在winforms中有数据绑定,但是我正要将我的头发拉出来试图简单地将文本框绑定到属性。绑定到另一个类中的属性WPF

我只是想我的选择类绑定到不同的控件,一个我目前正试图绑定是AppCliOptions.CLIPath

我第一次只想说我一直在现在这一个现在几天,每天花费一个小时左右的时间来弄清楚什么是错误的。然而,我没有找到任何具体的东西,我想要做什么,也许我只是忽略它,或者我还没有得到WPF和XAML,我相信这是简单的。

我确实看到一些说你不能绑定到一个静态类,但我的类不是静态的,只是我对该实例的引用是。

我有一个静态单例类,这是一个例子。

public abstract class AppOptionsBase<T> : INotifyPropertyChanged where T : AppOptionsBase<T>, new() 
{ 
    protected static T instance = new T(); 

    public event PropertyChangedEventHandler PropertyChanged; 

    public static T Instance => instance; 

    protected AppOptionsBase() { } 
    protected void OnPropertyChanged(string name) 
    { 
     PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(name)); 
    } 
} 
public class AppCliOptions : AppOptionsBase<AppCliOptions> 
{ 
    private string _cliPath; 
    public string CLIPath { get => _cliPath; set { _cliPath = value; OnPropertyChanged("CLIPath"); } } 
    public AppCliOptions() 
    { 
     //Set defaults 
     CLIPath = @"C:\Path\to\CLI.exe"; 
    } 
} 

我Xaml.cs文件

public static AppCliOptions CLIOptions => AppCliOptions.Instance; 

我的.xaml文件

<TextBox Grid.Row="1" Grid.Column="0" DataContext="{Binding CLIOptions}" Text="{Binding Path=CLIPath}" BorderBrush="Black"/> 

文本框的文本始终是空白的,如果我通过代码调用CLIOptions.CLIPath我得到默认价值如预期。 在完成了所有的阅读之后,我尝试了几十种不同的方法来尝试和绑定到这个,但我似乎无法让它工作。

回答

0

我通过不尝试在xaml中设置上下文来解决问题。

窗口加载事件

txtCLIPath.DataContext = CLIOptions; 

XAML

<TextBox x:Name="txtCLIPath" Grid.Row="1" Grid.Column="0" Text="{Binding CLIPath}" BorderBrush="Black"/>