Caliburn Micro MVVM绑定到xaml datatemplate

时间:2018-06-07 11:17:54

标签: xaml mvvm binding datatemplate caliburn.micro

希望你能帮助我:)。

使用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

0 个答案:

没有答案