- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
假设我有一个特定控件的基本 View 模型,该控件实现了一些基本属性,例如
public abstract class ControlVmBase{
public abstract int IconSize {get;set;}
}
我还有一个要与该控件一起使用的 ResourceDictionary,理想情况下将包含的样式中的值绑定(bind)到 ControlVmBase
的实现。我认为通过 ObjectDataProvider 执行此操作是个好主意,因为它看起来像是一个干净的解决方案,并在 XAML 中为我提供了 Intellisense 支持:
<ResourceDictionary>
<ObjectDataProvider x:Key="LinkedVm" ObjectType="{x:Type ControlVmBase}" />
<Style x:Key="MySpecialControlStyle" TargetType="MyCustomControl">
<Setter Property="ImageSize" Value="{Binding Source={StaticResource LinkedVm}, Path=IconSize}" />
</Style>
</ResourceDictionary>
但是这是行不通的,因为 ODP 试图实例化 ObjectType,这是毫无意义的,因为它是一个抽象类,不会影响已实现的类。是否可以使用这样的 ODP,或者是否有另一种可能绑定(bind)到派生类?
最佳答案
问题是您使用的是基类,它不能像您期望的那样工作。由于您在设计时不知道类型,因此您确实遇到了问题。
那么让我们谈谈解决方案。事实上,您不必介意类型,您也可以绑定(bind)到特定类型的方法。这很好,因为您现在可以创建一个工厂类,它会选择正确的类型并返回一个实例。
<ObjectDataProvider x:Key="odp"
ObjectType="{x:Type local:ControlVmBaseFactory}"
MethodName="GetInstance"
/>
您还可以创建一个包装器对象,在其中将您的类型传递给参数,并让方法返回它的一个实例。
<ObjectDataProvider x:Key="odp"
ObjectType="{x:Type local:ControlWrapper}"
MethodName="GetInstance"
>
<ObjectDataProvider.ConstructorParameters>
<system:Type>Your.Class.Name</system:Type>
</ObjectDataProvider.ConstructorParameters>
</ObjectDataProvider>
关于c# - ObjectDataProvider 可以与派生类一起使用吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29674311/
我目前正在尝试使用对象数据提供程序来返回我想用作每个列表框项的背景的颜色,颜色取决于该列表框项索引。 基本上传递给对象的参数是原始颜色和 listboxitem 索引,它会根据它的索引返回更浅的颜色.
我不敢相信没有人能解决这个问题,或者我只是错过了一些东西。 我有一个自定义的 DataSourceController 来处理检索数据并将其提供给其余的应用程序控件。自然,它使用我也初始化的 sql
假设我有一个特定控件的基本 View 模型,该控件实现了一些基本属性,例如 public abstract class ControlVmBase{ public abstract int I
我正在尝试在我的 ObjectDataSource 中使用嵌套类型 this文章。它似乎对我不起作用。 最佳答案 这是 VS 2008 及更高版本中的已知问题。 Microsoft's offici
我写了这段代码: public class CustomData { public int F1 { get; set; } public int F2 { get; set; }
我创建了一个简单的 MVVM,只有三个类 CashFlowView、CashFlowViewModel、CashFlowModel。 我使用基础架构的 9.1 XamDataPresenter(或 x
我有一个绑定(bind)到 ComboBox 的枚举在我看来。 public enum MyItems { [Browsable(false)] Item1, [Browsab
我将其中一个 VM 的实例放入资源字典中,例如: 我将某些用户控件的 DataContext 绑定(bind)到此: 它在运行时运行良好,因为所有连接和服务器都可用,并且许多逻辑对象都已正确初始化
我正在尝试在我的主应用程序和用户控件之间共享一个 ObjectDataProvider 资源。我在应用程序和用户控件中包含的单独资源字典文件中定义 odp。 然后我尝试在主应用程序中访问它,如下所
我看过了,但我找不到这个错误的答案(我明白了!)。 我正在阅读本文 CodeProject Datagrid practical example并尝试在 WPF 中修改我的简单 CRUD 屏幕的代码,
问题很简单: 有一个命名空间 xmlns:local= "clr-namespace:Notify" . 有一个“通知”类。该类位于解决方案中 有一个 XAML 代码: 在这种形式下,一
假设您有以下类(class): class ProcessController { public List Active { get { ... } } ... public
我想在我的 C# 代码后面而不是我的 XAML 中创建我的 ObjectDataProvider。 我想知道如何将此 XAML 更改为等效的 C#。 XAML 由 Microsoft Expressi
我在 DataGrid 中有两个 DataGridComboBoxColumns(技术上是 DataGridTemplateColumns)。我正在使用 MVVM。 第一列的 ItemsSource
在我的 WPF 应用程序中,我有一个保存按钮,当集合计数大于 0 时需要启用该按钮。 我正在尝试使用将使用 Convert.ToBoolean(int value) 的 ObjectDataProvi
我不太清楚问题出在哪里,因为我几乎可以肯定我做了其他帖子告诉我要做的事情。我之前已经将一个可观察的字符串集合绑定(bind)到一个组合框,所以它应该可以工作。 数据类: namespace UIBlo
我们以前在我以前的工作中这样做过,它在那里工作得很好,但由于某种原因,我现在无法让它工作。 我只想使用 ObjectDataProvider 在 XAML 中创建 ViewModel 类的实例,以便我
我将一个 ListView 绑定(bind)到 ObjectDataProvider。我从用户那里获取了一些值并在运行时更改了我的 ObjectDataProvider,但是当我的 ObjectDat
我想在后面的代码中用键/值数据填充组合框,我有这个: XAML: 代码隐藏: using System.Windows;
我正在尝试将 Enum 绑定(bind)到 ComboBox。我见过很多人使用 ObjectDataProvider 但我似乎无法访问它。我还注意到有些人在 Window.Resources 中使用它
我是一名优秀的程序员,十分优秀!