开发者社区> luminji> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

让WPF和SL控件同时支持绑定和赋值

简介: 前台: 后台: using System;using System.Collections.Generic;using System.Linq;using System.
+关注继续查看

前台:


<UserControl x:Name="msl"
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:Control
="clr-namespace:Sl.MELearning.EnterpriseLibrary.Controls.ControlBase"
xmlns:vm
="clr-namespace:Sl.MELearning.EnterpriseLibrary.Controls.ViewModel"
xmlns:cv
="clr-namespace:Sl.MELearning.EnterpriseLibrary.Controls.Converter"
xmlns:i
="http://schemas.microsoft.com/expression/2010/interactivity"
xmlns:ei
="http://schemas.microsoft.com/expression/2010/interactions"
x:Class
="Sl.MELearning.EnterpriseLibrary.Controls.SingleChoice"
mc:Ignorable
="d"
d:DesignHeight
="300" d:DesignWidth="400">
<UserControl.Resources >
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="Styles/DictionaryChoice.xaml" />
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</UserControl.Resources>
<Grid x:Name="LayoutRoot" Background="White">
<Grid.RowDefinitions>
<RowDefinition Height="auto"></RowDefinition>
<RowDefinition Height="auto"></RowDefinition>
<RowDefinition Height="15"></RowDefinition>
<RowDefinition Height="0"></RowDefinition>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="40"/>
<ColumnDefinition Width="40"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>


<TextBlock Text="{Binding Choice.IndexInPaper, Mode=TwoWay, ElementName=msl}" Grid.Row="0" Grid.Column="0" Width="30" Height="30" Margin="16,12,0,0">
</TextBlock>

<Control:PaperRichText x:Name="prtQuesiton" Grid.Row="0" Grid.Column="1" Grid.ColumnSpan="2" Xaml="{Binding Choice.ChoiceQuestion, Mode=TwoWay, ElementName=msl}" IsReadOnly="True" BorderShowed="False" ScrollViewer.HorizontalScrollBarVisibility="Hidden" ScrollViewer.VerticalScrollBarVisibility="Hidden" Margin="5,5,5,5">
</Control:PaperRichText>

<ListBox x:Name="LbSingleSelection" Grid.Row="1" x:FieldModifier="public" ItemsSource="{Binding Choice.ChoiceStems, ElementName=msl}" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" ScrollViewer.HorizontalScrollBarVisibility="Hidden" ScrollViewer.VerticalScrollBarVisibility="Hidden" Grid.ColumnSpan="3" Width="Auto" ItemContainerStyle="{StaticResource ListBoxItemStyle1}" BorderThickness="0">
<ListBox.ItemTemplate>
<DataTemplate>
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="auto"/>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="40"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>

<Border Grid.Column="0" Grid.Row="0" Width="25" Height="25" Cursor="Hand" CornerRadius="25" BorderThickness="2" Background="{Binding Selected, Converter={StaticResource borderBackgroundConvert}}" BorderBrush="{Binding Selected, Converter={StaticResource borderColorConvert}}">
<TextBlock Text="{Binding Path=StemABCDShowed, Mode=TwoWay}" FontSize="12" Width="25" Height="25" Cursor="Hand" Foreground="{Binding Selected, Converter={StaticResource borderColorConvert}}" Padding="8,3,0,0" HorizontalAlignment="Center" VerticalAlignment="Center"/>
<i:Interaction.Triggers>
<i:EventTrigger EventName="MouseLeftButtonDown" >
<i:InvokeCommandAction Command="{Binding DataContext.Clicked, Mode=TwoWay, ElementName=tbb}" CommandParameter="{Binding}">
</i:InvokeCommandAction>
</i:EventTrigger>
</i:Interaction.Triggers>
</Border>

<Control:PaperRichText x:Name="prtListItem" Grid.Column="1" Grid.Row="0" Xaml="{Binding Path=Stem}" IsReadOnly="True" BorderShowed="False" Cursor="Hand" Width="{Binding Width, ElementName=msl, Converter={StaticResource choiceWidthConverter}}" >
<i:Interaction.Triggers>
<i:EventTrigger EventName="Clicked" >
<i:InvokeCommandAction Command="{Binding DataContext.Clicked, Mode=TwoWay, ElementName=tbb}" CommandParameter="{Binding}">
</i:InvokeCommandAction>
</i:EventTrigger>
</i:Interaction.Triggers>
</Control:PaperRichText>

</Grid>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
<Rectangle Height="10" VerticalAlignment="bottom" Grid.Row="2" Grid.ColumnSpan="3" Style="{StaticResource ChoiceRectangle}">
</Rectangle>
<TextBlock Height="0" Grid.Row="3" Grid.ColumnSpan="3" x:Name="tbb">
<TextBlock.DataContext>
<vm:SingleChoiceViewModel x:Name="singleChoiceViewModel" ></vm:SingleChoiceViewModel>
</TextBlock.DataContext>
</TextBlock>
</Grid>
</UserControl>

后台:


using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Shapes;
using Sl.MELearning.EnterpriseLibrary.Controls.Core;
using Sl.MELearning.EnterpriseLibrary.Controls.ViewModel;
using Sl.MELearning.EnterpriseLibrary.Controls.UIModel;

namespace Sl.MELearning.EnterpriseLibrary.Controls
{
public partial class SingleChoice : UserControl
{
public SingleChoice()
{
InitializeComponent();
this.Loaded += new RoutedEventHandler(SingleChoice_Loaded);

}

void SingleChoice_Loaded(object sender, RoutedEventArgs e)
{
(tbb.DataContext
as SingleChoiceViewModel).Choice = Choice;
}

public static readonly DependencyProperty ChoiceProperty = DependencyProperty.Register("Choice", typeof(Choice), typeof(SingleChoice), new PropertyMetadata(null));
public Choice Choice
{
get
{
return (Choice)GetValue(ChoiceProperty);
}
set
{
SetValue(ChoiceProperty, value);
(tbb.DataContext
as SingleChoiceViewModel).Choice = value;
}
}

}


}

注意:

SingleChoice_Loaded

set中的

(tbb.DataContext as SingleChoiceViewModel).Choice = value;

第一句是为了绑定的时候。

下面那句是为了直接赋值。

Creative Commons License本文基于Creative Commons Attribution 2.5 China Mainland License发布,欢迎转载,演绎或用于商业目的,但是必须保留本文的署名http://www.cnblogs.com/luminji(包含链接)。如您有任何疑问或者授权方面的协商,请给我留言。

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
WPF 之 数据与命令绑定 (MVVM方式)
WPF 之 数据与命令绑定 (MVVM方式)
0 0
wpf中的datagrid绑定操作按钮是否显示或者隐藏
如图,需要在wpf中的datagrid的操作那列有个确认按钮,然后在某些条件下确认按钮可见,某些情况下不可见的,放在mvc里直接在cshtml页面中if..else就行了。 但是在wpf里不行。。网上搜索了好久才找到解决方法,原来只是binding那个visiable属性就行了,
6114 0
WPF中如何将ListViewItem双击事件绑定到Command
原文:WPF中如何将ListViewItem双击事件绑定到Command 今天的博客将介绍如何实现ListViewItem双击事件绑定到ViewModel中的Command。实现方法借助了Style中的EventSetter,请看下面的详细代码: ...
880 0
WPF Bind 绑定
原文:WPF Bind 绑定 版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/koloumi/article/details/74332515 用过WPF的童鞋应该都是知道WPF最好用的就是这个 绑定了,这里简单记录一下关于绑定的。
696 0
在WPF中如何使用RelativeSource绑定
原文:在WPF中如何使用RelativeSource绑定 在WPF绑定的时候,指定绑定源时,有一种办法是使用RelativeSource。 这种办法的意思是指当前元素和绑定源的位置关系。 第一种关系: Self 举一个最简单的例子:在一个StackPanel中,有一个TextBlock。
853 0
WPF 的 ElementName 在 ContextMenu 中无法绑定成功?试试使用 x:Reference!
原文:WPF 的 ElementName 在 ContextMenu 中无法绑定成功?试试使用 x:Reference! 版权声明:本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。
625 0
WPF ViewModel与多个View绑定后如何解决的问题
原文:WPF ViewModel与多个View绑定后如何解决的问题 当重复创建View并绑定同一个ViewModel后,ViewModel中的字段更新,在新的View中的没有反应或者在View中找不到相应的视觉树(如ListBox的ListBoxItem) 初始的解决方案:View关闭后,注销属性Unregister Dependency。
771 0
【我们一起写框架】MVVM的WPF框架(二)—绑定
MVVM的特点之一是实现数据同步,即,前台页面修改了数据,后台的数据会同步更新。 上一篇我们已经一起编写了框架的基础结构,并且实现了ViewModel反向控制Xaml窗体。 那么现在就要开始实现数据同步了。
1211 0
WPF使用异步+绑定的方式处理大数据量
原文:WPF使用异步+绑定的方式处理大数据量      WPF的优势在于界面处理,即使是这样,在面对大数据量的时候也免不了界面假死,同一个线程里处理界面跟大数据量,这是不可避免的。解决办法还是有的,可以使用分页加载,虚拟加载,动态加载,增加条件限制...      比较好的解决办法是使用异步+绑定的方式,即绑定控件的数据源,异步获取数据。
605 0
[WPF 基础知识系列] —— 绑定中的数据校验Vaildation
原文:[WPF 基础知识系列] —— 绑定中的数据校验Vaildation 前言: 只要是有表单存在,那么就有可能有对数据的校验需求。如:判断是否为整数、判断电子邮件格式等等。 WPF采用一种全新的方式 - Binding,来实现前台显示与后台数据进行交互,当然数据校验方式也不一样了。
806 0
+关注
luminji
微软最有价值技术专家(MVP),著有《编写高质量代码:改善C#程序的157个建议》,有着十多年的软件从业资历。
文章
问答
文章排行榜
最热
最新
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载