У меня есть свойство в модели представления, которое я хотел бы установить через XAML, но я не могу понять, как это сделать.У меня есть довольно простой пользовательский элемент управления (содержащий список элементов), два из которых должны быть размещены на странице, и я хотел бы иметь возможность установить один для «Source» (определяется перечислением) и один длябыть 'Target'.
[Код, приведенный ниже, был несколько урезан, поэтому извиняюсь, если я случайно допустил некоторые ошибки или что-то упустил.]
Мое перечисление:
public enum ConversionSide
{
Source, // Convert something FROM whatever is here.
Target // Convert something TO whatever is here.
}
У меня есть страница, которая выглядит следующим образом:
<Page
x:Class="MyApp.Views.ConverterPage"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:models="using:MyApp.Models"
xmlns:my="using:MyApp.Controls"
xmlns:prismMvvm="using:Prism.Windows.Mvvm"
prismMvvm:ViewModelLocator.AutoWireViewModel="True"
Style="{StaticResource PageStyle}"
mc:Ignorable="d">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="1*" />
<ColumnDefinition Width="1*" />
</Grid.ColumnDefinitions>
<my:SelectorPage Name="SourceSelector" Grid.Column="0" />
<my:SelectorPage Name="TargetSelector" Grid.Column="1" />
</Grid>
</Page>
... где SelectorPage - это пользовательский элемент управления (я назвал его «Страница», чтобы сделать Prism AutoWireработать, но это не проблема здесь), содержащий список элементов (все работает нормально), который выглядит следующим образом ...
<UserControl
x:Class="MyApp.Controls.SelectorPage"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:models="using:MyApp.Models"
xmlns:my="using:MyApp.Controls"
xmlns:prismMvvm="using:Prism.Windows.Mvvm"
prismMvvm:ViewModelLocator.AutoWireViewModel="True"
mc:Ignorable="d">
<ListView
Grid.Column="0"
ItemsSource="{x:Bind ViewModel.MyList, Mode=OneWay}"
SelectedItem="{x:Bind ViewModel.MySelectedItem, Mode=TwoWay}">
<ListView.Header>
<TextBlock Margin="0,8,0,8" HorizontalAlignment="Center" FontStyle="Italic" Text="Header Text" />
</ListView.Header>
<ListView.ItemContainerStyle>
<Style TargetType="ListViewItem">
<Setter Property="HorizontalContentAlignment" Value="Stretch" />
</Style>
</ListView.ItemContainerStyle>
<ListView.ItemTemplate>
<DataTemplate x:DataType="models:MyListItem">
<my:MyListItemTemplate />
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
</UserControl>
.. с кодом позади ...
public sealed partial class SelectorPage : UserControl
{
private SelectorViewModel ViewModel => DataContext as SelectorViewModel;
public SelectorPage()
{
this.InitializeComponent();
}
}
SelectorViewModel выглядит следующим образом ...
public class SelectorViewModel : ViewModelBase
{
private ConversionSide _side;
public ConversionSide Side
{
get { return _side; }
set { SetProperty(ref _side, value); }
}
// Many lines have been omitted for 'clarity'.
}
Я хотел бы иметь возможность установить свойство Side для SelectorViewModel в XAML следующим образом ...
<my:SelectorPage Name="SourceSelector" Grid.Column="0" Side="Source" />
<my:SelectorPage Name="TargetSelector" Grid.Column="1" Side="Target" />
(Once Sideбыл установлен, я не ожидаю, что это когда-либо изменится.)
Как я могу это сделать?
Я посмотрелпри использовании свойства зависимости, но я не могу заставить его изменить свойство в SelectorViewModel.Когда я добавляю один в SelectorPage, он отображается в XAML, и я могу установить его, но на самом деле он ничего не делает, поэтому я, вероятно, неправильно его использую.Помещение свойства зависимости в модель представления мне не подходит, но я могу ошибаться.Я просматривал Интернет - документацию Microsoft, блоги, статьи, переполнение стека и т. Д. - но не могу найти ничего, что достаточно хорошо объясняет вещи, чтобы я мог понять, что я должен делать.Похоже, что статьи, которые я нашел, посвящены исключительно получению информации из связанного свойства, с которым у меня все в порядке, но мне нужно, чтобы установил свойство из XAML.
Может кто-нибудь дать мне какие-нибудь подсказки, пожалуйста?Я не знаю, нахожусь ли я в шаге от того, чтобы получить то, что хочу, или на расстоянии многих миль.