将状态栏数据绑定到另一个数据上下文

本文关键字:数据 上下文 另一个 状态栏 数据绑定 | 更新日期: 2023-09-27 18:32:18

我在主应用程序中有一个状态栏,可以动态创建其他用户控件。我想公开状态栏,以便子用户控件可以更新状态栏。主应用的数据上下文设置为配置设置的实例。我的尝试是这个(不起作用):在 Xaml 中:

<StatusBar Grid.Row="2" Name="StatusBar">
        <StatusBarItem Grid.Column="0">
            <TextBlock Name="CurrentStatus">Ready</TextBlock>
        </StatusBarItem>

在我拥有的代码隐藏中(在 MainWindow 类内)

    // an inner class for data binding
    // ViewModelBase is an class that inherits INotifyPrppertyChanged
    class MainViewModel : ViewModelBase
    {
        public string _Status = "";
        public string Status
        {
            get { return _Status; }
            set { _Status = value; OnPropertyChanged("Status"); }
        }
    }
    private MainViewModel _MainViewModel;
    public MainWindow()
    {
        configSettings = new ConfigurationSettings();
        InitializeComponent();
        this.DataContext = configSettings;
        this._MainViewModel = new MainViewModel();
        this.StatusBar.DataContext = _MainViewModel;
        Binding statusBinding = new Binding("Status");
        statusBinding.Source = this._MainViewModel._Status;
        CurrentStatus.SetBinding(TextBlock.TextProperty, statusBinding);
    }

ViewModelbase 之所以有效,是因为我在其他视图模型中使用它。

我收到的错误消息是:

BindingExpression path error: 'Status' property not found on 'object' ''String' (HashCode=36924794)'. BindingExpression:Path=Status; DataItem='String' (HashCode=36924794); target element is 'TextBlock' (Name='CurrentStatus'); target property is 'Text' (type 'String')

将状态栏数据绑定到另一个数据上下文

您不需要在此处设置绑定Source,因为您已经设置了DataContext因此请删除下面的行,您的绑定将起作用:

statusBinding.Source = this._MainViewModel._Status;

或者,既然您已经为状态栏设置了DataContext,为什么不直接在 xaml 中绑定文本块,例如

<TextBlock Name="CurrentStatus" Text="{Binding Status}"></TextBlock>