有什么办法可以将一个变量绑定到另一个变量? (WPF项目)

时间:2019-06-24 03:32:13

标签: c# wpf variables binding

我已将边框可见性设置为绑定到Views中名为P的类中的变量的边界,其中P是布尔类型。我在ViewModels的类中有另一个变量,称为M,其中M是字典,而Enum由三个元素组成,例如A,B和C。我如何将P绑定到M.value,如果P为false, M.value设置为A,如果P为true,则M.value设置为B或C(取决于某些条件),以便当M.value为B或C时边框可见,而M.value则边框不可见.value是A?

到目前为止,我已经实现了将边框可见性绑定到P上并且可以正常工作(当P为true时,它是可见的,而当P为false时,它不可见)。

enum E {
        A,B,C
}

public class ClassInViews {
    private bool picked = false;
    public bool Picked {get; set;}
}

public class ClassInViewModels {

    private Dictionary<(...An arbitrary class in Models),E> M;
}

1 个答案:

答案 0 :(得分:1)

由于您要将其绑定到Dictionary的更改,因此我将使用ObservableDictionary并通过引发“ Picked”属性的更改事件来响应集合中的任何更改。因此,您的ViewModel必须实现INotifyPropertyChanged。

那么最简单的事情就是将您的逻辑写到P的getter中。

public bool Picked 
{
  get
  {
    /*Your logic here*/
  }
}

第二个选项:您可以创建一个IValueConverter,将给定的目录转换为可见性。

public class Bool2VisibilityConverter : MarkupExtension, IValueConverter
    {
        static Bool2VisibilityConverter _converter;

        public override object ProvideValue(IServiceProvider serviceProvider)
        {
            if (_converter == null)
            {
                _converter = new Bool2VisibilityConverter();
            }
            return _converter;
        }

        #region IValueConverter Members
        public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
        {
            var dic = value as ObservableDictionaray<YourTypesHere>;

            if (dic == null)
              return Visibility.Collapsed;


            bool visible = /* Check the Dictionary with your logic */;

            return (bool) visible ? Visibility.Visible : Visibility.Collapsed;
        }

        public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
        {
            throw new NotImplementexException();
        }
        #endregion
    }

然后您可以简单地使用它来转换字典:

<Button Visibility="{Binding Dictioanry, Converter={conv:Bool2VisibilityConverter}}" />