【问题标题】:How to dynamically bind a WPF Controls property with ViewModels different property?如何将 WPF 控件属性与 ViewModels 不同的属性动态绑定?
【发布时间】:2015-11-18 06:30:24
【问题描述】:

例如: 我们需要动态绑定一个 RadioButton Value 属性和 ViewModel 的两个不同属性。

查看模型

public class MyViewModel
{

//Property-1 to bind with RadioButton
        public bool Accepted
        {
            get;
            set;
        }

//Property-2 to bind with RadioButton
        public bool Enable
        {
            get;
            set;
        }

//Property to Identify which property should bind with radio button.
        public bool Mode
        {
            get;
            set;           
        }
}

Xaml

<RadioButton Value="{Binding Accepted, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"/>

是否可以动态绑定 Accepted 或 Enable 属性 根据 Mode 属性?

  • 提出了一个解决方案是使用 IMultiValueConverter 和 MultiBinding。方法合适吗?

【问题讨论】:

  • 您可以控制视图模型吗?为什么不绑定到一个新属性,该属性的值根据 Mode 的值反映 Accepted 或 Enable 的值?

标签: c# wpf


【解决方案1】:

您不能从视图模型更改绑定。但是,您可以创建一个绑定到该属性的新属性,然后将其值委托给正确的其他值,例如:

public class ViewModel
{
    public bool Prop1 { get; set; }
    public bool Prop2 { get; set; }
    public bool Use2 { get; set; }

    public bool Prop
    {
        get { return Use2 ? Prop2 : Prop1; }
        set
        {
            if (Use2)
                Prop2 = value;
            else
                Prop1 = value;
        }
    }
}

当然,这个例子缺少INotifyPropertyChanged 的实现细节。

【讨论】:

  • 我们需要在每个属性发生变化时通知新属性的属性更改。对吗?
  • 是的,对于您想要影响视图的更改的每个属性,该事件都需要存在。所以在这种情况下,您只能为Prop 实现它,但是当您更改任何其他树属性时,您需要记住也为Prop 引发事件,因为这将间接更改然后更新视图。
猜你喜欢
  • 2019-07-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-12-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多