gpt4 book ai didi

wpf - 将 ViewModel 属性绑定(bind)到静态资源的属性

转载 作者:行者123 更新时间:2023-12-03 11:01:35 25 4
gpt4 key购买 nike

我有一个接口(interface)IFooBar以及它的一些具体实现,FooBarOneFooBarToo .

public interface IFooBar
{
int Value { get; set; }
}

public class FooBarOne : IFooBar { ... }

public class FooBarTwo : IFooBar { ... }

我添加了 DependencyProperty (称为 FooBar )类型为 IFooBar到自定义控件 MyControl .
public static readonly DependencyProperty FooBarProperty = ...

public IFooBar FooBar
{
get { return (IFooBar)GetValue(FooBarProperty ); }
set { SetValue(FooBarProperty, value); }
}

每当使用此控件时,我都可以创建 FooBarOne 的实例。或 FooBarTwo作为静态资源,然后使用这些设置 FooBar DependencyPropertyMyControl 的实例上这一切都按预期工作。
  <UserControl.Resources>
<ResourceDictionary>
<ns:FooBarOne x:Key="MyFooBarOne" Value="1"/>
<ns:FooBarTwo x:Key="MyFooBarTwo" Value="2"/>
</ResourceDictionary>
</UserControl.Resources>

...

<controls:MyControl FooBar="{StaticResource MyFooBarOne}"/>
<controls:MyControl FooBar="{StaticResource MyFooBarTwo}"/>

我正在苦苦挣扎的是,我现在需要将 ViewModel 中的值绑定(bind)到 IFooBar.Value属性(property)。

我尝试将以下内容添加到我的资源中:
  <UserControl.Resources>
<ResourceDictionary>
<ns:FooBarOne x:Key="MyFooBarOne" Value="{Binding SomeViewModelProperty}"/>
<ns:FooBarTwo x:Key="MyFooBarTwo" Value="{Binding SomeViewModelProperty}"/>
</ResourceDictionary>
</UserControl.Resources>

但这不起作用,因为 IFooBar.Value不是 DependencyProperty .

我意识到我可能会添加一个新的 DependencyProperty对于 IFooBar.Value给我的 MyControl , 但实际上 IFooBar实际上包含许多属性,我想避免创建一个新的 DependencyProperty IFooBar 上的每个属性.

有没有办法让我将 ViewModel 属性绑定(bind)到我的 IFooBar 的属性上?实例?

最佳答案

Is there a way for me to bind a ViewModel property onto the the properties of my IFooBar instances?



不,为了能够将某些内容绑定(bind)到 XAML 中的属性,目标属性必须是依赖项属性。

在下面的示例标记中, Value是目标属性和 SomeViewModelProperty是源属性:
<ns:FooBarOne x:Key="MyFooBarOne" Value="{Binding SomeViewModelProperty}"/>

同样,目标属性必须是依赖属性,您才能将值绑定(bind)到它。

关于wpf - 将 ViewModel 属性绑定(bind)到静态资源的属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60952478/

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