首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在wpf中根据其他控制器的属性值改变属性控制器

在wpf中根据其他控制器的属性值改变属性控制器
EN

Stack Overflow用户
提问于 2020-04-25 02:17:59
回答 2查看 98关注 0票数 0

在我的wpf应用程序中,我有一个复选框和2个文本,如下所示:

代码语言:javascript
复制
<CheckBox x:Uid="Checkbox_1" FlowDirection="RightToLeft" IsChecked="{Binding TickCheckBox, Mode=TwoWay}" Style="{StaticResource StandardCheckBoxStyle}">My Checkbox</CheckBox>

<dxe:TextEdit x:Uid="dxe:TextEdit_1" Grid.Row="1" Grid.Column="1" Width="100" Style="{StaticResource FleetScheduledHoursStyle}" EditValue="{Binding RealValue, Mode=OneWay}" EditMode="InplaceInactive" ToolTipService.ShowDuration="20000" />

<dxe:TextEdit x:Uid="dxe:TextEdit_2" Grid.Row="1" Grid.Column="1" Width="100" Style="{StaticResource FleetScheduledHoursStyle}" EditValue="{Binding RealValue, Mode=OneWay}" EditMode="InplaceInactive" ToolTipService.ShowDuration="20000" />

TickCheckBox绑定到视图模型中的一个属性,如下所示:

代码语言:javascript
复制
private bool tickCheckBox;
public bool TickCheckBox
{
    get
    {
        return this.tickCheckBox;
    }
    set
    {
        if (this.TickCheckBox.Equals(value))
        {
               return;
        }
        this.tiketCheckBox = value;
        this.NotifyPropertyChange(() => this.TickCheckBox);
    }
}

当我选中复选框时,如何将其中一个textedit (例如EditMode)的属性"InplaceActive“更改为”InplaceActive“?

谢谢你的帮忙!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-04-25 10:23:01

您可以使用IValueConverter

BoolToEditModeConverte.cs

代码语言:javascript
复制
public class BoolToEditModeConverter : IValueConverter
{
  public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
  {
    if (!(value is bool isChecked))
    {
      throw new ArgumentException("Converter value must be of type 'bool'");
    }
    return isChecked 
      ? EditMode.InplaceInactive
      : EditMode.None;
  }

  public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
  {
    throw new NotSupportedException();
  }
}

使用

代码语言:javascript
复制
<Window>
  <Window.Resources>
    <BoolToEditModeConverte x:Key="BoolToEditModeConverte" />
  </Window.Resources>

  <CheckBox x:Name="MyCheckbox" />

  <TextEdit EditMode="{Binding ElementName=MyCheckBox, 
                               Path=IsChecked, 
                               Converter={StaticResource BoolToEditModeConverte}}" />
</Window>
票数 1
EN

Stack Overflow用户

发布于 2020-04-25 17:33:15

由于您使用的是POCOViewModel,所以您只需为TextEdit.EditMode定义一个属性并在xaml中绑定,并在poco视图模型中为TickCheckBox更改事件定义一个方法,如下所示:

代码语言:javascript
复制
public partial class MainWindow : Window {
    public MainWindow() {
        InitializeComponent();
        this.DataContext = Vm.Create();
    }
}

[POCOViewModel]
public class Vm {
    public virtual bool TickCheckBox { get; set; } = false;
    public virtual EditMode EditMode { get; set; } = EditMode.InplaceInactive;

    public static Vm Create() => ViewModelSource.Create(() => new Vm());

    protected void OnTickCheckBoxChanged() {
        if (this.TickCheckBox) {
            // or this.EditMode = EditMode.InplaceActive;
            this.EditMode = EditMode.Standalone;
        } else {
            this.EditMode = EditMode.InplaceInactive;
        }
    }
}

和xaml:

代码语言:javascript
复制
<StackPanel>
    <CheckBox x:Uid="Checkbox_1" FlowDirection="RightToLeft" IsChecked="{Binding TickCheckBox, Mode=TwoWay}">
        My Checkbox
    </CheckBox>

    <dxe:TextEdit
        x:Uid="dxe:TextEdit_1"
        EditMode="{Binding EditMode}"
        EditValue="{Binding RealValue, Mode=OneWay}"
        ToolTipService.ShowDuration="20000" />
    <dxe:TextEdit
        x:Uid="dxe:TextEdit_2"
        EditMode="Standalone"
        EditValue="{Binding RealValue, Mode=OneWay}"
        ToolTipService.ShowDuration="20000" />
</StackPanel>
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61420175

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档