精华内容
下载资源
问答
  • WPF可以使用MultiBinding进行多值绑定,使用IMultiValueConverter进行多值转换 例: (1)转换器 public class ContentConverter : IMultiValueConverter { //源属性传给目标属性时,调用此方法...

    WPF可以使用MultiBinding进行多值绑定,使用IMultiValueConverter进行多值转换

    例:

    (1)转换器

        public class ContentConverter : IMultiValueConverter
        {
            //源属性传给目标属性时,调用此方法ConvertBack
            public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture)
            {
                if (values == null || values.Length == 0)
                    throw new ArgumentNullException("values can not be null");
    
                string s = "";
                foreach (var item in values)
                {
                    s += System.Convert.ToString(item);
                }
    
                return s;
            }
    
            //目标属性传给源属性时,调用此方法ConvertBack
            public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture)
            {
                return null;
            }
        }
    

    (2)绑定

        <Window.Resources>
            <local:ContentConverter x:Key="content"></local:ContentConverter>
        </Window.Resources>
        <Grid>
            <Label HorizontalAlignment="Left" Height="23" Margin="243,208,0,0" Foreground="{Binding Status,Converter={StaticResource foreColor},Mode=OneWay}" VerticalAlignment="Top" Width="120">
                <Label.Content>
                    <MultiBinding Converter="{StaticResource content}">
                        <Binding Path="Str1"/>
                        <Binding Path="Str2"/>
                        <Binding Path="Str3"/>
                    </MultiBinding>
                </Label.Content>
            </Label>
            <Button Content="Button" HorizontalAlignment="Left" Margin="35,44,0,0" VerticalAlignment="Top" Width="75" Click="Button_Click"/>
        </Grid>
    

    (3)button click事件

            private void Button_Click(object sender, RoutedEventArgs e)
            {
                window2ViewModel.Str1 = "1";
                window2ViewModel.Str2 = "2";
                window2ViewModel.Str3 = "3";
            }
    

    (4)效果  lable显示 str1,str2和str3相加后的字符串

     

     

      

     

    转载于:https://www.cnblogs.com/yaosj/p/11240275.html

    展开全文
  • WPF语言,参考文章是: http://blog.csdn.net/hustypf/article/details/7678655 但是在使用包含转换器的绑定时候,语言不起作用,比如: <TextBlockText="{Binding IsPortOK, Converter={...

    在WPF做多语言,参考文章是:

    http://blog.csdn.net/hustypf/article/details/7678655

     

     

    但是在使用包含值转换器的绑定时候,多语言不起作用,比如:

    <TextBlock Text="{Binding IsPortOK, Converter={StaticResource BoolToStringConverterComStatus}}"/>

    试了些动态绑定等方法,都不行:

    1. 绑定不能修改……

    2.ConverterParameter、ConverterCulture等都不是依赖属性,所以不能用binding。

     

    解决方法:接口 IValueConverter改为 IMultiValueConverter,实现  MultiBinding来绕过去。

    1. 后台依赖类中,增加 IsLanguageChanged依赖属性

    2.

    <TextBlock>
      <TextBlock.Text>
        <MultiBinding Converter="{StaticResource PortStatusMultiLangString_MultiValueConverter}">
          <Binding Path="IsPortOK"/>
          <Binding Path="IsLanguageChanged"/>
        </MultiBinding>
      </TextBlock.Text>
    </TextBlock>

    3. IsLanguageChanged在IMultiValueConverter中用来当触发点

    public class PortStatusMultiLangString_MultiValueConverter: IMultiValueConverter
    {
      public object Convert(object[] values, Type targetType, object parameter, System.Globalization.CultureInfo culture)
      {
        bool isPortOk = (bool )values[0];
        bool isLanguageChanged= (bool )values[1];

        if (isPortOk )
        {
          return Application.Current.TryFindResource("OK").ToString();

        }

        else

        {
          return Application.Current.TryFindResource("Error").ToString();

        }
      }

    }

     

    转载于:https://www.cnblogs.com/cocochow/p/5692285.html

    展开全文
  • WPF中的实现 我们首先来看一下常规的绑定 <Windowx:Class="WpfApplicationSample.MainWindow"xmlns=...

    WPF中的实现

    我们首先来看一下常规的绑定

    <Window    x:Class="WpfApplicationSample.MainWindow"    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"    Title="MainWindow"    Height="350"    Width="525">    <Grid>        <!--WPF 单值绑定-->        <TextBlock            Text="{Binding Title}"></TextBlock>      </Grid></Window>

    这个很简单,我们几乎不需要做任何解释

     

    接下来看一下WPF中如何进行多值绑定

    <Window    x:Class="WpfApplicationSample.MainWindow"    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"    Title="MainWindow"    Height="350"    Width="525">    <Grid>        <!--WPF 单值绑定-->        <TextBlock            Text="{Binding Title}"></TextBlock>         <!--WPF 多值绑定,结合StringFormat-->        <TextBlock>            <TextBlock.Text>                <MultiBinding                    StringFormat=" {0}-{1}">                    <Binding                        Path="Title"></Binding>                    <Binding                        Path="Time"></Binding>                </MultiBinding>            </TextBlock.Text>         </TextBlock>    </Grid></Window>

    这是第一种多值绑定方式,可以直接通过StringFormat格式化多个值,并最终显示在TextBlock中。这种做法,在很多时候,都够用了。

     

    但是,在某些时候,我们可能需要对这些多个值做复杂的处理,光用StringFormat满足不了要求,怎么办呢?

    是的,我们会联想到使用ValueConverter。在System.Windows.Data这个命名空间中,我们以前用过一个IValueConverter的接口对吧,那是针对单值绑定的。关于这个接口,更多信息,可以参考 http://msdn.microsoft.com/zh-cn/library/system.windows.data.ivalueconverter.aspx

    using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Windows.Data;namespace WpfApplicationSample{    /// <summary>    /// WPF单值绑定转换器    /// 作者:陈希章    /// </summary>    public class TitleConverter:IValueConverter    {        #region IValueConverter Members         public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)        {            //这里实现具体逻辑            throw new NotImplementedException();        }         public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)        {            //这里实现具体逻辑            throw new NotImplementedException();        }         #endregion    }}

     

    既然是这个思路,那么有没有多值转换器呢?答案是有的。请参考

    using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Windows.Data;namespace WpfApplicationSample{    /// <summary>    /// WPF单值绑定转换器    /// 作者:陈希章    /// </summary>    class MultiValueConverterSample:IMultiValueConverter    {        #region IMultiValueConverter Members         public object Convert(object[] values, Type targetType, object parameter, System.Globalization.CultureInfo culture)        {            //这里实现具体逻辑,请注意第一个参数是一个数组,可以传递多个值            throw new NotImplementedException();        }         public object[] ConvertBack(object value, Type[] targetTypes, object parameter, System.Globalization.CultureInfo culture)        {            throw new NotImplementedException();        }         #endregion    }}

     

    那么,如何在XAML中使用这个转换器呢?其实和单值转换器是一样的,请参考下面的语法

    <Window    x:Class="WpfApplicationSample.MainWindow"    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"    Title="MainWindow"    Height="350"    Width="525"    xmlns:local="clr-namespace:WpfApplicationSample">     <Window.Resources>        <local:MultiValueConverterSample            x:Key="cv"></local:MultiValueConverterSample>    </Window.Resources>    <Grid>        <!--WPF 单值绑定-->        <TextBlock            Text="{Binding Title}"></TextBlock>         <!--WPF 多值绑定,结合StringFormat-->        <TextBlock>            <TextBlock.Text>                <MultiBinding                    StringFormat=" {0}-{1}">                    <Binding                        Path="Title"></Binding>                    <Binding                        Path="Time"></Binding>                </MultiBinding>            </TextBlock.Text>         </TextBlock>         <!--WPF 多值绑定,结合Converter-->         <TextBlock>            <TextBlock.Text>                <MultiBinding                    Converter="{StaticResource cv}">                    <Binding                        Path="Title"></Binding>                    <Binding                        Path="Time"></Binding>                </MultiBinding>            </TextBlock.Text>        </TextBlock>     </Grid></Window>

    看起来很好理解,对吧?这是WPF中为我们默认就提供的功能,确实很方便。

    但是,这个特性(多值绑定)却没有在Silverlight中实现。

     

    转载于:https://www.cnblogs.com/wlming/p/5039361.html

    展开全文
  • 在实际的开发中,经常会有这样的需要,当一个属性变化时,需要其他属性一起联动发生变化。这种变化如果只是后台之间属性之间的约束,直接写在...WPF的转换器分为单值转换器,和多值转换器。既然是属性变化影响的是其...

            在实际的开发中,经常会有这样的需要,当一个属性变化时,需要其他属性一起联动发生变化。这种变化如果只是后台之间属性之间的约束,直接写在后台代码中也无所谓,甚至可以说是这样组织是一个不错的策略。

             但是,如果这种变化只体现在界面的联动效果上,比如属性A的变化,影响到属性B在界面上是否可以编辑。在这种场景中,如果后台代码过分干预前台的显示效果,反而显得设计过于耦合了。我们可以把这种变化,通过转换器在前台实现控制。WPF的转换器分为单值转换器,和多值转换器。既然是属性变化影响的是其他属性的先关显示,这样的情况使用单值转换器就很难起到灵活监控属性变化的作用了。这里就引入了多值转换器。

    1、实现一个多值转换器,继承IMultiValueConverter

        /// <summary>
        /// 楼层面积是否可用
        /// </summary>
        public class FloorAreaEnableConverter : IMultiValueConverter
        {
            public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture)
            {
                try
                {
                    if (values == null || !values.Any())
                        return false;
                    BuildingFunction function = values[0] as BuildingFunction;
                    if (function == null)
                        return false;
                    var enable = function.ElevationRange != null && function.ElevationRange.ToString() == ">24m";
                    if (!enable&&!string.IsNullOrWhiteSpace(function.FloorArea))
                        function.FloorArea = string.Empty;
                    return enable;
                }
                catch (Exception)
                {
    
                    return false;
                }
            }
    
    
            public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture)
            {
                throw new NotImplementedException();
            }
        }

    2、在WPF前台界面对定义的多值转换器进行使用

    <ComboBox.IsEnabled>
    <MultiBinding Converter="{StaticResource FloorAreaEnable}">
                     <Binding ></Binding>
                      <Binding Path="ElevationRange"></Binding>
                      <Binding Path="FloorArea"></Binding>
    </MultiBinding>
    </ComboBox.IsEnabled>

     

     

    展开全文
  • WPF到底不值得学?

    万次阅读 2015-01-27 15:23:47
    疑问 前一阵对WPF进行了基础知识的学习,当然花的时候实在很有限,(比我几年前学习Android的时间还要少得),由此就关心到WPF这项技术的生命力,由于前几年微软宣布停止Sliverlight的更新, 所以我们没有理由不担心...
  • WPF Binding转换器ValueConverter

    千次阅读 2012-05-07 09:58:12
    多值转换器: WPF、Silverlight及Windows Phone程序开发中往往需要将绑定的数据进行特定转换,比如DateTime类型的时间转换为yyyyMMdd的日期,再如有一个值是根据另外多组值的不同而异的,此时我们就需要定制自己的...
  • 首先需要一个多值转换器 class TextMulti:IMultiValueConverter { #region IMultiValueConverter 成员 public object Convert(object[] values, Type targetType, object parameter, Sys...
  • WPF 参照WPF实现Silverlight中的多值绑定特性 2013-04-17 11:20 by swarb, ... 阅读, ... 评论, 收藏, 编辑 前言 数据绑定在WPF和Silvelright开发中的作用不言而喻,无处不在的绑定,节省了大量的代码...
  • 最近有不少wpf新手问wpf的命令怎么绑定个控件,很多人为此绞尽脑汁,网上的答案找了也没找到靠谱的,其实用MultiBinding就可以了。从.net 3.0版本开始,就支持MultiBinding 关于MultiBinding的说明: ...
  • WPF、Silverlight及Windows Phone程序开发中往往需要将绑定的数据进行特定转换,比如DateTime类型的时间转换为....Net Framework提供了两种Converter接口,单值转换的接口IValueConverter和多值转换的接口IMultiValue
  • 二、多值转换代码:    /// <summary> 根据参考值范围确定状态  [ValueConversion(typeof(string), typeof(string))]  public class MultiStringStateConverter : IMultiValueConverter  {  public...
  • WPF中枚举的应用

    2021-02-22 15:01:37
    今天用到了需要再wpf的用户控件中将枚举以参数的方式传递到ViewModel,搜索了很资料都是将枚举绑定到列表或者Combox的数据源中,经过次尝试可以将枚举中的单个以参数的方式传递到ViewModel了,进行一下记录。...
  • 经常会遇到这样的情况,combobox中能存储一个数据和一个显示,我们看到的显示,但是 实际使用的是数据。而这个数据可能来源一个类或者一个数据库中的某张表。 在 .net winforms开发中很好处理,定义一个类A...
  • 效果如下: 代码如下: <Button Click="InventoryDetail_OnClick" Template="{StaticResource InventoryButton}" /> <!-- Link Button -->...ControlTemplate x:Key="InventoryButto...
  • 在DataGrid绑定时,有一列的是需要前面两列的相减得出来的结果.而且绑定的实体集合中没有相应的属性. 初学wpf,没用到什么mvvm.就是简单的在后台给ItemsSource赋了一个集合对象. 示例代码: ``` //User类...
  • WPF 线程处理(3)

    2019-10-05 02:11:02
    WPF 线程处理(1) WPF 线程处理(2) WPF 线程处理(3) WPF 线程处理(4) WPF 线程处理(5) WPF 线程处理(6) 首先我们需要几个属性来保存取得的数据,因为在其他的线程中是不能读取控件的. ...
  • 疑问 前一阵对WPF进行了基础知识的学习,当然花的时候实在很有限,(比我几年前学习Android的时间还要少得),由此就关心到WPF这项技术的生命力,由于前几年微软宣布停止Sliverlight的更新, 所以我们没有理由不担心...
  • 总结 本文对照了在WPF和Silverlight中实现多值绑定的特性,并且给出了一个Silverlight中的替代解决方案 http://www.cnblogs.com/chenxizhang/archive/2011/09/24/2189604.html <!-- google_ad_client = "ca-pub-...
  • 一、MultiBinding+Converter 多值绑定及多值转换实例 当纵向流量大于横向流量时指示灯应为绿色,当纵向流量小于横向流量时指示灯应为红色,否则指示灯为黄色。 1、定制ColorConverter类,此时Convert中参数是...
  • public class RGBConverter : IMultiValueConverter { //正向修改,整合颜色 public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture) { ...
  • WPF 线程处理(1)

    2019-10-05 02:10:50
    WPF 线程处理(1) WPF 线程处理(2) ...线程处理数据后在this.Dispatcher.Invoke() 调用委托后将更新到界面,这样尤其是在处理大数据的时候界面会实时更新,主线程界面不会假死, 不会影响用户体验, 希...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 661
精华内容 264
关键字:

wpf多值