zoukankan      html  css  js  c++  java
  • WPF 绑定注意事项一

    1.当一个界面不用控件需绑定不同ViewModel时,可在控件上单独设置DataContext

    DataContext="{Binding Source={StaticResource Locator},Path=GB_FloCheckStepInforViewModel}"

    2.如果该控件写在resource中,则无法读取DataType中字段值。即数据源头在一个控件上无法混用

    <DataTemplate DataType="{x:Type baseModel:FlowTempleteModel}">

    3.MVVM在cs中使用Service中的方法时,注意实例化部分

    private IGB_FloCheckStepInforService _service;
    //实例化
    _service = new XDS_SmartC.Services.GB_FloCheckStepInforService();
     var result = _service.FlowCheckmMultBack(curTempleteSource);
    

      

    4.多字段绑定

    <Path.Visibility>
    <MultiBinding Converter="{StaticResource FlowCheckMultBackVisibleConvert}">
    <Binding Path="FlowMultBackRecord"/>
    <Binding Path = "FlowCheckStatus"/> 
    </MultiBinding>
    </Path.Visibility>
    

    5.多值转换器

     public class FlowCheckMultBackVisibleConvert : IMultiValueConverter
        {
            public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture)
            {
    
                try
                {
                    if (values[0].ToString().Contains("DependencyProperty.UnsetValue")
                        || values[1].ToString().Contains("DependencyProperty.UnsetValue")
                        )
                    {
                        return Visibility.Collapsed;
                    }
    
                    string FlowMultBackRecord = values[0].ToString();
                    int FlowCheckStatus = (int)values[1];
    
                    if (FlowMultBackRecord != null && !FlowMultBackRecord.Trim().Equals("") && FlowCheckStatus == 1)
                    {
    
                        return Visibility.Visible;
                    }
                    else
                    {
                        return Visibility.Collapsed;
                    }
                    
                }
                catch (Exception)
                {
                    return Visibility.Collapsed;
                }
            }
    
            public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture)
            {
                throw new NotImplementedException();
            }
        }
    

     6.RelativeSource 绑定

    //1.向上找到为button的控件的IsEnabled属性
    "{Binding="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=Button}, Path= IsEnabled}"
    //2.绑定自身的Header值
    "{Binding RelativeSource={RelativeSource Self}, Path=Header}"
    
    //3.魔板中的绑定:绑定setter中的属性
    HorizontalContentAlignment="{TemplateBinding HorizontalContentAlignment}"
    
    //4. 绑定父级模板的属性
     IsChecked="{Binding IsExpanded, Mode=TwoWay, RelativeSource={RelativeSource TemplatedParent}}"
    

      

      7.DataTrigger触发的动态变化

    <Button.Resources>
      <Style TargetType="{x:Type Path}" >
       <Style.Triggers>
            <DataTrigger  Binding="{Binding  RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=Button}, Path= IsEnabled}" Value="True">
              <Setter  Property="Fill" Value="{DynamicResource AccentColorBrush}" />
           </DataTrigger>
            <DataTrigger  Binding="{Binding  RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=Button}, Path= IsEnabled}" Value="False">
              <Setter  Property="Fill" Value="LightGray" />
          </DataTrigger>
       </Style.Triggers>
    </Style>
    </Button.Resources>
    

     8.DataContext的绑定

    //1.后台CS中绑定
    DataContext = this;
    //2.xaml的Style中想要绑定ViewModel中的值
    需用DataContext.命令 或 DataContext.变量
    9.Mvvm结构,在后台CS中改变ViewModel中的值
     var viewModel = this.DataContext ;
          var mm = viewModel.GetType();
          viewModel.VisibleArea = (long)visibleArea;
    

     9.ContextMenu绑定

     <DataGrid.ContextMenu>
    <ContextMenu>
     <MenuItem Margin="0,0,0,5" Header="导出" Style="{x:Null}" Command="{Binding CmdItemDataGridExport}" 
     CommandParameter="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=ContextMenu}, Path=PlacementTarget}"
                                                       IsEnabled="{Binding EditUIEditable}" ></MenuItem>
      </ContextMenu>
     </DataGrid.ContextMenu>

      

     

  • 相关阅读:
    百度之星2019 初赛一 题解
    [NOI2019]弹跳(KD-Tree/四分树/线段树套平衡树 优化建图+Dijkstra)
    [BZOJ2157]旅游(树链剖分/LCT)
    [BZOJ3230]相似子串(后缀数组)
    回文树/回文自动机(PAM)学习笔记
    [CF30E]Tricky and Clever Password(KMP+manacher)
    APIO2019题解
    代码大全
    算法竞赛常用资料整理
    手动修复 Flash CS3 简中化不完全问题
  • 原文地址:https://www.cnblogs.com/mamaxiaoling/p/14435126.html
Copyright © 2011-2022 走看看