2017-08-06 120 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"/>