摘要: 一个.netcore下的,十分简单的rabbitmq封装,基于RabbitMQ.Client Nuget https://www.nuget.org/packages/RabbitMQ.Bus/ https://www.nuget.org/packages/RabbitMQ.Bus.Autofac/ 阅读全文
posted @ 2018-07-25 14:43 ojdev 阅读(184) 评论(0) 推荐(0) 编辑

在Xamarin.Forms中,Xaml的模板功能并没有原生WPF丰富,比如Label中虽然有FormattedText可以添加Span来丰富Label的功能,但是下面的Span中的Text并没有绑定属性,无法直接绑定Model的值。

但是FormattedText本身是可以进行绑定的。

那么折中一下,进行数据绑定的时候绑定FormattedText属性,就能临时解决一下问题。

例如有一个Model

 1 using Xamarin.Forms;
 2 
 3 namespace Baishijiaju.StoreApp.Core.Models
 4 {
 5     public class AvararInfo
 6     {
 7         public string AvararUrl { set; get; } = @"http://192.168.0.228/Common/Images/default-profile-picture.png";
 8         public string Name { set; get; } = "百氏佳居";
 9         public string Company { set; get; } = "哈尔滨市百氏佳居网络科技有限公司";
10         public FormattedString NameFormattedString
11         {
12             get
13             {
14                 return new FormattedString
15                 {
16                     Spans = {
17                         new Span { Text = "经纪人", ForegroundColor=Color.FromHex("FF6F42"), FontSize=14 },
18                         new Span { Text = Name,ForegroundColor=Color.FromHex("414141"), FontSize=14 } }
19                 };
20             }
21         }
22     }
23 }

然后我们在进行数据绑定的时候,给Label的FormattedText进行绑定NameFormattedString,Model则正常进行创建就可以了。

1         <local:AvatarView
2                RelativeLayout.XConstraint="{ConstraintExpression Type=RelativeToParent,Property=Width,Factor=1,Constant=-228}"
3                RelativeLayout.YConstraint="{ConstraintExpression Type=RelativeToParent,Property=Y,Factor=0,Constant=12}" >
4             <local:AvatarView.BindingContext>
5                 <model:AvararInfo />
6             </local:AvatarView.BindingContext>
7         </local:AvatarView>

 

那么我们在Xaml中

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <ContentView xmlns="http://xamarin.com/schemas/2014/forms" 
 3              xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
 4              x:Class="Baishijiaju.StoreApp.Core.Components.AvatarView"
 5              xmlns:effect="clr-namespace:Baishijiaju.StoreApp.Core.Effects" WidthRequest="192" HeightRequest="48">
 6     <ContentView.Content>
 7         <RelativeLayout VerticalOptions="Fill" HorizontalOptions="Fill">
 8             <Label 
 9                RelativeLayout.WidthConstraint="{ConstraintExpression Type=RelativeToParent,Property=Width,Factor=1,Constant=0}"
10                RelativeLayout.YConstraint="{ConstraintExpression Type=RelativeToParent,Property=Y,Factor=1,Constant=0}"
11                RelativeLayout.HeightConstraint="{ConstraintExpression Type=RelativeToParent,Property=Height,Factor=1,Constant=0}">
12                 <BoxView.Effects>
13                     <effect:BorderEffect BorderColor="White" BorderRadius="48" BorderWidth="1" CoverBackgroundColor="True" />
14                 </BoxView.Effects>
15             </Label>
16             <Label Text="{Binding Company}" FontSize="12" TextColor="{StaticResource Gery500}" HorizontalTextAlignment="End"
17                RelativeLayout.WidthConstraint="{ConstraintExpression Type=RelativeToParent,Property=Width,Factor=1,Constant=-48}"
18                RelativeLayout.YConstraint="{ConstraintExpression Type=RelativeToParent,Property=Y,Factor=0,Constant=8}"/>
19             <Label FormattedText="{Binding NameFormattedString}" HorizontalTextAlignment="End"                   
20                RelativeLayout.WidthConstraint="{ConstraintExpression Type=RelativeToParent,Property=Width,Factor=1,Constant=-48}"
21                RelativeLayout.YConstraint="{ConstraintExpression Type=RelativeToParent,Property=Y,Factor=0,Constant=26}"/>
22             <Image Source="{Binding AvararUrl}" WidthRequest="40" HeightRequest="40"
23                RelativeLayout.XConstraint="{ConstraintExpression Type=RelativeToParent,Property=Width,Factor=1,Constant=-44}"
24                RelativeLayout.YConstraint="{ConstraintExpression Type=RelativeToParent,Property=Y,Factor=0,Constant=4}"/>
25         </RelativeLayout>
26     </ContentView.Content>
27 </ContentView>

 

posted @ 2017-12-25 14:37 ojdev 阅读(431) 评论(0) 推荐(0) 编辑
摘要: 项目是老项目的维护,已经三年的东西了,虽然这期间维护的时候尝试过修改查询方式以提高效率,但是领导说怕出问题,所以一直搁置了,这次,领导打算全部进行优化,做一次大的调整,我就顺便记录一下之前尝试的优化方式与这一次优化的总结。2009年刚出现LINQ TOSQL的时候,我们这个采购的项目就采用了这个东西,当时感觉,这个东西太好用了,而且也因为之前一直做JAVA,算是.Net的初学者,所以感觉微软的东西很容易上手,好方便啊。所以边学边就写了那个项目,做完后一直用着,有过几次修改,但没大大变动,直到后来服务器升级,我又看了一次,发现查询的时候是在是慢的可以,一个结果只有1000+的数据,查询到显示竟然 阅读全文
posted @ 2011-12-15 14:25 ojdev 阅读(3148) 评论(27) 推荐(4) 编辑
摘要: MSDN中说ObservableCollection是一个动态的数据集合,在添加项、移除项或刷新整个列表的时候,此集合将提供通知。我是在WPF中用了这个,但是我在网上找资料的时候发现,有在WinForm中也用到的,我并没有去验证,使用方式应该一样吧,只是WPF中是提供与前台UI界面中的控件进行绑定操作时通知更新的,WinForm中怎么做就不知道了。这个,上面MSDN那么说了,但是按照我的理解就是,ObservableCollection数据集中的条目有变动,就出发通知流程,引发更新操作。这是一个泛型类,ObservableCollection<T>的形式,我之前有一个例子,是使用L 阅读全文
posted @ 2011-12-13 13:40 ojdev 阅读(3241) 评论(16) 推荐(3) 编辑
摘要: 这是今年7、8月份的时候,那个项目中用到的,需要显示柱状图和饼图,我用到的是柱状图,因为是先做Demo所以,所以打算所有东西都是用WPF做而不使用第三方,一个是因为可能涉及到版权问题,也是为了维护和定制方便,是用WPF做这类的应用,界面和可定制性还是不错的,如果有一个好的美工的话就更好了,后来赶时间,就想到了用ListBox自己做一个,做完之后感觉还不错,虽然不是很美观,但是基本功能倒是实现了。前台放置一个ListBox控件,用来显示柱状图,是用ListBox的自定义模板功能为柱状图设计样式:<ScrollViewer HorizontalScrollBarVisibility=&quo 阅读全文
posted @ 2011-12-12 09:23 ojdev 阅读(2115) 评论(0) 推荐(2) 编辑
摘要: 先说同步与异步的区别,总说同步异步的,其实一直不清楚什么是同步异步,今天找了一下:同步:当一个消息发送后,等对方回应后继续发送下一条指令。异步:当一个消息发送后,不等对方回应就发送下一条。异步:刚才被更正了,异步是,接收方不进行处理立即返回。同步,举个例子,就是你给人打电话的时候,你说一句,对方回你一句,然后你在说下一句,交流嘛。异步呢,你给一个人打电话,你一直在说。而BeginInvoke与Invoke就是同步与异步。BeginInvoke是异步操作,Invoke是同步操作。而这两个方法中执行的是一个委托。举一个代码中的例子,在WPF中有一个TextBlock控件,Name属性为txtCon 阅读全文
posted @ 2011-12-06 09:58 ojdev 阅读(3366) 评论(11) 推荐(5) 编辑
摘要: 今天突然想到一个判断session是否合法的做法,asp.net的,之前我们的做法是下面这样的形式的:1 if (Session["UserID"] == "" || Session["UserID"] == null)2 {3 Response.Redirect("../Login.aspx?m=登录已超时,请重新登陆!");4 }一直我都觉得这个方法很不好,非常不好,但是一直也没找到好的方法,刚才突然就想到和匿名方法,结合??运算符,如果session为空,那么就不合法的了, 可以用来判断用户是否登录。由于Se 阅读全文
posted @ 2011-12-02 13:53 ojdev 阅读(3777) 评论(22) 推荐(4) 编辑
摘要: yield这个关键字是和迭代器挂钩的,而且是与return一起以yield return的形式合用的,用来返回迭代器中的条目。yield不能单独放在try-catch块中,如果try中有yield那么,这个try块后面不许跟着finally块;也不能出现在匿名方法中,所以,看起来yield似乎并不常用,但是也不是不用。我前面有一个关于迭代器的例子《C#中的迭代器基础》中就用到了。可以参考一下那个例子,但是这里要再说的一点是我后来看到的,yield是跟return一起使用的,形式为yield return xxx,一般来说单独的return在每个方法中只能存在一个。而yield则不同的是,可以出 阅读全文
posted @ 2011-12-01 16:09 ojdev 阅读(498) 评论(0) 推荐(1) 编辑
摘要: 迭代器是可以返回相同类型的值的有序序列的一段代码。迭代器可用作方法、运算符或 get 访问器的代码体。迭代器代码使用yieldreturn 语句依次返回每个元素。yieldbreak 将终止迭代。可以在类中实现多个迭代器。 每个迭代器都必须像任何类成员一样有唯一的名称,并且可以在 foreach 语句中被客户端代码调用,如下所示:foreach(int x in SampleClass.Iterator2){}。迭代器的返回类型必须为 IEnumerable、IEnumerator、IEnumerable(Of T) 或IEnumerator(Of T)。迭代器是 LINQ 查询中延迟执行行为 阅读全文
posted @ 2011-12-01 15:13 ojdev 阅读(1772) 评论(13) 推荐(5) 编辑
摘要: 在MSDN上面对new()解释说到是where字句的构造函数约束,带有new()约束的任何类型都必须有可访问的无参构造函数,正常来说C#创建的类默认都有一个无参的构造函数,即使你没有写,但是如果你写了一个有参数的构造函数后,那么就没有默认无参的那个了,就需要自己手动写一个。还是拿前两天的国籍那个举个例子: 1 /// <summary> 2 /// 国籍的接口 3 /// </summary> 4 public interface INationality 5 { 6 string Nationality 7 { 8 set; 9 }10 str... 阅读全文
posted @ 2011-11-30 14:28 ojdev 阅读(2930) 评论(5) 推荐(1) 编辑
点击右上角即可分享
微信分享提示