wpf : 绑定到另一个 xaml 文件中的控件

Posted

技术标签:

【中文标题】wpf : 绑定到另一个 xaml 文件中的控件【英文标题】:wpf : Bind to a control in another xaml file 【发布时间】:2015-06-25 12:02:36 【问题描述】:

我有一个 main.xaml 文件。在 main.xaml 文件中,它引用另一个 xaml 文件中的列表框。它是使用 view:LayoutViewList 调用的

在 main.xaml 文件中,有一个按钮。该按钮仅在选择列表框时启用。看起来 ElementName=view.LayoutViewList.LayoutListBox 不起作用。非常感谢

Button IsEnabled="Binding ElementName=view:LayoutViewList.LayoutListBox, Path=SelectedItems.Count" 

绑定错误:

System.Windows.Data Error: 4 : Cannot find source for binding with reference 'ElementName=view:LayoutViewList.LayoutListBox'. BindingExpression:Path=SelectedItems.Count; DataItem=null; target element is 'Button' (Name=''); target property is 'IsEnabled' (type 'Boolean')
System.Windows.Data Error: 4 : Cannot find source for binding with reference 'ElementName=view:LayoutViewList.LayoutListBox'. BindingExpression:Path=SelectedIndex; DataItem=null; target element is 'Button' (Name=''); target property is 'NoTarget' (type 'Object')

【问题讨论】:

为什么两个 xaml 不使用相同的列表?我不确定您是否可以引用另一个 xaml 文件... 因为listbox控件的代码很多,所以移到了另一个xaml文件中。如何从 main.xaml 访问列表框? 好的。因此,您需要创建一个将获取数据的 UserControl。然后您可以在任何地方重复使用您的客户用户控件 【参考方案1】:

如果带有Binding 的视图是MainView 文件的子视图,则需要使用RelativeSource Binding。试试这个:

<Button IsEnabled="Binding DataContext.SelectedItems.Count, RelativeSource=
    RelativeSource AncestorType=x:Type YourPrefix:MainView" />

这个Binding指的是SelectedItems属性暴露的对象的Count属性在设置为UserControl或@987654331的DataContext的对象中 @命名为MainView

【讨论】:

非常感谢。请详细说明:Binding DataContext.SelectedItems.Count 你说的“UserControl or Window named MainView”,这几乎不是事实,实际上它找到了一个RelativeSource TYPE MainView。

以上是关于wpf : 绑定到另一个 xaml 文件中的控件的主要内容,如果未能解决你的问题,请参考以下文章

WPF 用户控件中的数据绑定

C# WPF中xaml怎么调用.cs中的数据?反过来怎么调用?

如何绑定到WPF中的usercontrol内的控件?

如何为 ListView 控件中的第一个 WPF RadioButton 设置 XAML,以便默认检查?

如何从 WPF 中的另一个窗口绑定到 MainWindow 中的控件?

wpf 带参数的用户控件,如何在xaml中引入