MVVM:我有一个嵌套的按钮,单击该按钮时可以从中提取文本。
如您所知,如果嵌套按钮,则无法在其后的代码中调用该按钮, 因此,基本上我想单击此嵌套按钮,然后从XAML将该按钮的文本发送到我的viewModel。
我已经搜索了几天,但似乎仍然无法获得足够好的答案
我尝试过绑定-两个并更新源,但是我不知道这是否是正确的方法
<ItemsControl ItemsSource="{Binding Items}">
<ItemsControl.ItemTemplate>
<DataTemplate x:Name="dataTemp">
<!-- Declaring a button-->
<Button x:Name="btnItem" d:DataContext="{x:Static local:ItemDesign.Instance}"
Background="White" Height="60" Width="300">
<!--Content Grid (Main) -->
<Grid x:Name="container" Height="60" Width="300">
<Grid.ColumnDefinitions>
<!--Colour circle-->
<ColumnDefinition Width="Auto"/>
<!--Full Name-->
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<!--Colour Circle-->
<Border Grid.Column="0" Padding="6">
<Border Background="#FF1869B6"
Width="{Binding ActualHeight, RelativeSource={RelativeSource self}}"
CornerRadius="25">
<TextBlock x:Name="txtInitials" Text="{Binding Initials, Mode=TwoWay}"
VerticalAlignment="Center"
HorizontalAlignment="Center"
Foreground="White" FontSize="25" FontFamily="Segoe UI Semilight"/>
</Border>
</Border>
<!-- EO Colour Circle-->
<!-- Full Name Textblock-->
<TextBlock x:Name="txtFullName"
Text="{Binding FullName, Mode=TwoWay}"
Grid.Column="2"
Padding="15 0 0 0"
VerticalAlignment="Center"
Foreground="#FF1869B6"
TextTrimming="CharacterEllipsis"
FontSize="25"/>
<!-- EO Full Name Textblock-->
</Grid>
<!-- Button Styling -->
<Button.Style>
<Style TargetType="{x:Type Button}">
<Setter Property="BorderBrush" Value="White"/>
<Setter Property="BorderThickness" Value="0"/>
<Style.Triggers>
<Trigger Property="IsPressed" Value="true">
<Setter Property="BorderThickness" Value="2"/>
</Trigger>
<DataTrigger Binding="{Binding ElementName=btnItem, Path=IsPressed}" Value="true">
<!--
<Setter Property="Button" Value="{Binding FullName, Mode=OneWayToSource}"/>
-->
<Setter Property="Foreground" Value="Black"/>
</DataTrigger>
</Style.Triggers>
</Style>
</Button.Style>
<!-- EO Button Styling -->
</Button>
<!-- EO Declaring a button-->
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
</ScrollViewer>
</Grid>
</ScrollViewer>
<!-- EO Patient List -->
答案 0 :(得分:0)
有多种方法可以使用纯MVVM来完成您想要的工作,但是我将以一种方式回答它,让您将逻辑分解为适合您的一切。
此示例的目的是将Content
的{{1}}传递给ViewModel并将其显示在主Button
上的TextBlock
中。这是在MVVM中完成的,并且在后面不使用任何代码。
首先,有一个主窗口带有我认为您需要(或类似)的XAML,下面是使该示例在MVVM上运行的所有代码。
在此示例中,我通过命令中的参数将Window
的{{1}}传递回来。注意:按钮的Content
不必是,在许多情况下也可以不是文本。我正在将命令中的对象转换为文本,但是您需要确保它在XAML中有效。
Button
道歉,以合并所有代码,但希望为您提供完整的源代码。下面是RelayCommand,ViewModelBase,ExampleViewModel和TestItemViewModel。
Content