Привязка свойства ViewModel к свойству ресурса stati c - PullRequest
0 голосов
/ 31 марта 2020

У меня есть интерфейс IFooBar и некоторые его конкретные реализации, FooBarOne и FooBarToo.

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 в качестве ресурсов stati c, а затем использовать их для установите FooBar DependencyProperty для экземпляров MyControl, и все это работает, как и ожидалось.

  <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 к свойство IFooBar.Value.

Я попытался добавить в свои ресурсы следующее:

  <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 к свойствам моего IFooBar instanc эс

Ответы [ 2 ]

1 голос
/ 01 апреля 2020

Есть ли способ связать свойство ViewModel со свойствами моих IFooBar экземпляров?

Нет, чтобы вы могли что-то связывать свойство в XAML, свойство target должно быть свойством зависимости.

В приведенном ниже примере разметки Value - это свойство цели, а SomeViewModelProperty - это source свойство:

<ns:FooBarOne x:Key="MyFooBarOne" Value="{Binding SomeViewModelProperty}"/>

И снова цель свойство должно быть свойством зависимости, чтобы вы могли привязать значение к нему.

1 голос
/ 31 марта 2020

Я предполагаю, что вы используете MVVM, если это так, то у вас должны быть свойства в ViewModel, которые возвращают IFooBar, а не объявляют stati c ресурсы. Тогда вы можете просто вернуть эти значения. Если вам нужно специально создать IFooBar для данного значения, вы можете создать ValueConverter, который принимает ваше значение и выплевывает FooBarOne или FooBarTwo.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...