c# - 绑定(bind)到 XAML 派生类中定义的依赖属性

标签 c# wpf xaml

我有一个从 Window 派生的简单 View 。在该派生类的代码隐藏文件中,我定义了一个名为 ActiveDocument 的新 DependencyProperty。

我希望将这个新的 DependencyProperty 绑定(bind)到 ViewModel 上的一个属性,该属性被设置为 View 的 DataContext。

我可以使用类构造函数中的代码设置此绑定(bind),但尝试在 XAML 文件中绑定(bind)该属性会导致一条错误消息,指出在类 Window 上找不到属性 ActiveDocument。

在 XAML 中执行此操作的正确语法是什么?

[用代码更新]

MainWindowViewModel.cs

class MainWindowViewModel
{
    public bool IWantBool { get; set; }
}

MainWindow.xaml.cs

public partial class MainWindow : Window
{
    public MainWindow()
    {
        DataContext = new MainWindowViewModel();
        InitializeComponent();
    }

    public static readonly DependencyProperty BoolProperty = DependencyProperty.Register(
        "BoolProperty", typeof(bool), typeof(MainWindow));
}

主窗口.xaml

<Window x:Class="DependencyPropertyTest.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:local="clr-namespace:DependencyPropertyTest"

    <!-- ERROR: BoolProperty not found on type Window. -->
    BoolProperty="{Binding path=IWantBool}"

    <!-- ERROR: Attachable property not found in type MainWindow. -->
    local:MainWindow.BoolProperty="{Binding path=IWantBool}">

    <Grid>

    </Grid>
</Window>

最佳答案

XAML 编译器不考虑 Window 的实际类型,它只查看根元素的类型。所以它不知道 MainWindow 中声明的属性。我不认为您可以在 XAML 中轻松做到这一点,但在代码隐藏中很容易做到:

public MainWindow()
{
    DataContext = new MainWindowViewModel();
    InitializeComponent();
    SetBinding(BoolProperty, new Binding("IWantBool"));
}

关于c# - 绑定(bind)到 XAML 派生类中定义的依赖属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10533697/

相关文章:

c# - 如何对齐 TreeView wpf 中的值

c# - Windows Phone - 将列表绑定(bind)到 LongListSelector

wpf - 如何在控件渲染时显示一些动画?

c# - 在 C# 中运行 cmd

C# XML 序列化元素命名空间

c# - 如何在 winform c# 中禁用工具条下的行?

wpf - 如何在 WPF 中提供字符串文字值作为绑定(bind)

c# - 将 C++ 结构编码到 C#

c# - 如何在选项卡控制选项卡内嵌套多个组框?

c# - 更改绑定(bind)属性时,ListView 分组不会更新