Как связать два разных свойства класса в DataTemplate
Я пытаюсь связать два свойства из разных классов в DataTemplate.
<DataTemplate x:Key="DemoItemTemplate" x:DataType="local:DemoInfo">
<NavigationViewItem Visibility="{Binding Visibility, Mode=TwoWay}" Content="{x:Bind Name}"/>
</DataTemplate>
DataType
установить как
DemoInfo
за это
DataTemplate
и
Name
значение обновлено с
DemoInfo
.
Я пробовал рассматривать модель как источник и относительную привязку источника. Но
Visibility
привязка свойств не работает с
ViewModel
класс. Любое предложение, как этого добиться?
Visibility="{Binding Visibility, Source={StaticResource viewModel}}"
3 ответа
Как связать два разных свойства класса в DataTemplate
Если связать видимость с
StaticResource
, пожалуйста, объявите класс ViewModel на своей странице
Resources
как следующее.
ViewModel
public class ViewModel
{
public ViewModel()
{
Visibility = false;
}
public bool Visibility { get; set; }
}
Xaml
<Page.Resources>
<local:ViewModel x:Key="ViewModel" />
</Page.Resources>
<DataTemplate x:DataType="local:Item">
<TextBlock
Width="100"
Height="44"
Text="{x:Bind Name}"
Visibility="{Binding Visibility, Source={StaticResource ViewModel}}" />
</StackPanel>
</DataTemplate>
Обновить
Если вы хотите, чтобы значение Visibility изменялось динамически во время выполнения, вам необходимо реализовать интерфейс INotifyPropertyChanged для класса ViewModel.
public class ViewModel : INotifyPropertyChanged
{
public ViewModel()
{
Visibility = false;
}
private bool _visibility;
public bool Visibility
{
get
{
return _visibility;
}
set
{
_visibility = value;
OnPropertyChanged();
}
}
public event PropertyChangedEventHandler PropertyChanged;
private void OnPropertyChanged([CallerMemberName] string PropertyName = null)
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(PropertyName));
}
}
Подробнее см. В официальном документе " Подробная привязка данных".
AFAIK, вы не можете использовать multibinding в UWP, вы можете попробовать использовать Locator. Что такое ViewModelLocator и каковы его плюсы и минусы по сравнению с DataTemplates?
Я могу ошибаться, но я думал, что у свойства есть выделенное перечисление, содержащее все возможные параметры (Visibility Enum) для свойства. Итак, ваша привязка может работать нормально, ноType
связанного свойства должно иметь типVisibility
с использованиемSystem.Windows
.
Кстати, я бы в любом случае не стал добавлять свойство видимости в модель представления. Я думаю, что более стандартным подходом было бы обеспечить видимостьDependencyProperty
в непосредственном коде представления для вашей привязки.