【问题标题】:How to Update the binding from other window in wpf?如何从 wpf 中的其他窗口更新绑定?
【发布时间】:2014-04-28 12:05:03
【问题描述】:

我有一个可观察的集合绑定到组合框。

下面是 Xaml

<ComboBox Name="Combo" HorizontalAlignment="Left" VerticalAlignment="Top" Width="120" 
    ItemsSource="{Binding Path=coll}"/>
<Button Content="Button" Click="Button_Click_1" HorizontalAlignment="Left" VerticalAlignment="Top" 
    Width="75" RenderTransformOrigin="0.649,3.417" Margin="10,36,0,0"/>

下面是我的代码

public partial class MainWindow : Window, INotifyPropertyChanged
{

    public event PropertyChangedEventHandler PropertyChanged = delegate { };
    public ObservableCollection<string> _coll { get; set; }
    public ObservableCollection<string> coll
    {
        get
        {
            return _coll;
        }
        set
        {
            _coll = value;
            PropertyChanged(this, new PropertyChangedEventArgs("coll"));
        }
    }

    public MainWindow()
    {

        InitializeComponent();

        coll = new ObservableCollection<string>();
        coll.Add("ABC");
        coll.Add("AAA");
        coll.Add("BBB");
        coll.Add("KKK");
        Combo.SelectedItem = coll[0];

        DataContext = this;
    }

    public MainWindow(string data)
        : this()
    {
        coll.Add(data);
    }

    private void Button_Click_1(object sender, RoutedEventArgs e)
    {
        Window1 window = new Window1();
        window.Show();
    }
}

现在我正在打开按钮单击事件的新窗口,并且我将数据从第二个窗口传递到主窗口,在这种情况下绑定不起作用

第二个窗口 Xaml

<TextBox Name="txtBox" HorizontalAlignment="Left" Height="23" TextWrapping="Wrap" 
    VerticalAlignment="Top" Width="120"/>
<Button Content="Button" Click="Button_Click_1" HorizontalAlignment="Left" 
    VerticalAlignment="Top" Width="75" Margin="10,28,0,0"/>

代码

public partial class Window1 : Window
{
    public Window1()
    {
        InitializeComponent();
    }

    private void Button_Click_1(object sender, RoutedEventArgs e)
    {
        MainWindow obj = new MainWindow(txtBox.Text);
        this.Close();
    }
}

【问题讨论】:

  • 你到底想做什么,不清楚。
  • 我正在将值从 Window1 收集到集合中,并且在关闭 window1 组合框后不会使用我们从 window1 输入的值进行更新
  • 是的,它肯定会发生,因为你创建了一个新的主窗口,所以以前的窗口不会被更新。我会添加一个代码。
  • 好的,谢谢 Harshana Narangoda,你能建议我如何处理这种情况吗?我undersatnd MainWindow 实例已更改
  • 我可以知道点击第二个窗口中的按钮后,第一个窗口是否有两个实例?

标签: c# wpf data-binding


【解决方案1】:

在您的主窗口中,您必须将可观察集合添加到其他构造函数,否则可观察集合没有数据。

public MainWindow(string data)
    : this()
{
    coll = new ObservableCollection<string>();
    coll.Add("ABC");
    coll.Add("AAA");
    coll.Add("BBB");
    coll.Add("KKK");
    Combo.SelectedItem = coll[0];

    DataContext = this;

    coll.Add(data);  
}

如果您创建主窗口的另一个实例,这将起作用。

【讨论】:

    猜你喜欢
    • 2016-03-23
    • 1970-01-01
    • 2016-06-02
    • 2013-03-19
    • 2016-11-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多