gpt4 book ai didi

c# - 从新窗口绑定(bind) WPF

转载 作者:行者123 更新时间:2023-11-30 12:24:21 25 4
gpt4 key购买 nike

我需要在更改独立窗口的用户控件后修复绑定(bind)。基本上现在我有两个使用 ShowDialog() 的窗口,我将新窗口连接到新的数据上下文

<Window.DataContext>
<ViewModels:DatabaseDesignViewModel/>
</Window.DataContext>

但是现在我在将按钮绑定(bind)到主窗口 Root View 中的命令时遇到了麻烦。

这就是我尝试在没有运气的情况下解决它的方法:

 <MenuItem Header="Go to design mode"
Command="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type Views:RootView}}, Path=DataContext.OKCommand}"/>

最佳答案

首先 - 我同意 Dennis 的观点,你应该多想你的架构,但当然有一个对你的请求的回答:

  1. 像这样创建一个附加属性:

    public class AttachedProperties
    {
    public static Window GetParentWindow( DependencyObject obj )
    {
    return (Window)obj.GetValue( ParentWindowProperty );
    }
    public static void SetParentWindow( DependencyObject obj, Window value )
    {
    obj.SetValue( ParentWindowProperty, value );
    }
    public static readonly DependencyProperty ParentWindowProperty =
    DependencyProperty.RegisterAttached( "ParentWindow", typeof( Window ), typeof( AttachedProperties ), new PropertyMetadata( null ) );
    }
  2. 将以下代码添加到您的子窗口 xaml.cs:

    protected override void OnActivated( EventArgs e )
    {
    base.OnActivated( e );
    this.SetValue( AttachedProperties.ParentWindowProperty, Owner );
    }
  3. 在您的子窗口 xaml 中,您可以使用以下绑定(bind)语法:

    <Window x:Class="WpfApplication3.ChildWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:local="clr-namespace:YourApplicationNamespace"
    x:Name="Self">
    <TextBlock Text="{Binding ElementName=Self, Path=(local:AttachedProperties.ParentWindow).DataContext.SomeProperty}" />
    </Window>

关于c# - 从新窗口绑定(bind) WPF,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34327969/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com