希望你能帮助我:)。
使用datatemplate时,我遇到了从视图中绑定到viewmodel中的属性的问题。
离。
视图模型
public class SearchInputViewModel : Screen
{
string SearchText
{
get => _searchText;
set
{
if (value == _searchText) return;
_searchText = value;
NotifyOfPropertyChange(() => SearchText);
}
}
}
查看
<UserControl x:Class="CustomUserControlsModule.Views.SearchInputView"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:local="clr-namespace:CustomUserControlsModule.Views"
xmlns:vm="clr-namespace:CustomUserControlsModule.ViewModels"
xmlns:i="clr-namespace:System.Windows.Interactivity;assembly=System.Windows.Interactivity"
xmlns:cal="http://www.caliburnproject.org"
mc:Ignorable="d"
d:DesignHeight="76"
d:DesignWidth="300">
<UserControl.Resources>
<ResourceDictionary Source="pack://application:,,,/ToolResources;component/Resources/Inputs.xaml" />
</UserControl.Resources>
<UserControl >
<UserControl.ContentTemplate>
<DataTemplate>
<StackPanel Margin="4">
<TextBlock x:Name="Label"
Text="{Binding Label}"
Style="{StaticResource LabelBaseStyle}"
/>
<Border x:Name="SearchTextBorder"
Style="{StaticResource StrokeNormalFilledStyle}"
>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*" />
<ColumnDefinition Width="Auto" />
</Grid.ColumnDefinitions>
<TextBox Grid.Column="0"
x:Name="SearchText"
Style="{StaticResource TextNormalFilledStyle}"
Tag="mytext"
>
</TextBox>
<Control Grid.Column="1"
x:Name="SearchIcon"
Template="{StaticResource SearchIcon}"
Background="Transparent"
Width="30" />
</Grid>
</Border>
<TextBlock x:Name="Helper"
Style="{StaticResource HelperNormalFilledStyle}"
>
</TextBlock>
</StackPanel>
如果将textBox与名称x:Name =“SearchText”绑定到viewmodel(如果它位于datatemplate中),我将如何?通常Caliburn会查看约定并看到TextBox的名称为SearchText,然后将其绑定到VM中的SearchText。
为什么我把它放在DataTemplate中是因为我在ex时有很多触发器。将鼠标悬停在文本框上,然后datatemplate中的其他控件应切换样式。我已经弄明白了。 唯一的问题是我在使用Datatemplate时似乎无法将视图绑定到viewmodel。
如果您需要更多信息,我会提供。
关心Alex