আমি কীভাবে বুলিয়ানটোভিজিবিলিটি কনভার্টারটি উল্টাব?


143

আমি একটি কন্ট্রোলের সম্পত্তি BooleanToVisibilityConverterআবদ্ধ করতে ডাব্লুপিএফ ব্যবহার করছি । এটি দুর্দান্ত কাজ করে, তবে আমি বুলেটিয়ান কিনা তা নিয়ন্ত্রণের একটিটি লুকিয়ে রাখতে চাই এবং এটি কিনা তা দেখায় ।VisibilityBooleantruefalse


দ্রষ্টব্য: বিটা 4 হিসাবে - সিলভারলাইটে বুলিয়ানটোভিজিবিলিটি অন্তর্ভুক্ত নেই - সুতরাং আপনাকে এটি যে কোনও উপায়ে নিজেই প্রয়োগ করতে হবে
সাইমন_উইভার


আমি বিশ্বাস করতে পারি না যে তারা এ জাতীয় কিছু করতে কিছু রূপান্তরকারী পরামিতি প্রয়োগ করেনি।
কামিল

উত্তর:


18

আইভালিউ কনভার্টারের নিজস্ব প্রয়োগ বাস্তবায়ন করুন। একটি নমুনা বাস্তবায়ন হয়

http://msdn.microsoft.com/en-us/library/system.windows.data.ivalueconverter.aspx

আপনার রূপান্তর পদ্ধতিতে এটি ডিফল্টগুলির পরিবর্তে আপনি যে মানগুলি চান তা ফেরত দিন।


250

উল্টানোর পরিবর্তে, আপনি জেনেরিক IValueConverterপ্রয়োগের মাধ্যমে একই লক্ষ্য অর্জন করতে পারেন যা কোনও বুলিয়ান মানকে সত্য এবং মিথ্যাটির জন্য কনফিগারযোগ্য টার্গেট মানগুলিতে রূপান্তর করতে পারে । নীচে এমন একটি বাস্তবায়ন দেওয়া হল:

public class BooleanConverter<T> : IValueConverter
{
    public BooleanConverter(T trueValue, T falseValue)
    {
        True = trueValue;
        False = falseValue;
    }

    public T True { get; set; }
    public T False { get; set; }

    public virtual object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        return value is bool && ((bool) value) ? True : False;
    }

    public virtual object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
    {
        return value is T && EqualityComparer<T>.Default.Equals((T) value, True);
    }
}

এর পরে, এটা উপশ্রেণী যেখানে Tহয় Visibility:

public sealed class BooleanToVisibilityConverter : BooleanConverter<Visibility>
{
    public BooleanToVisibilityConverter() : 
        base(Visibility.Visible, Visibility.Collapsed) {}
}

শেষ BooleanToVisibilityConverterঅবধি, আপনি এক্সএএমএল-তে উপরে কীভাবে ব্যবহার করতে পারেন এবং এটির জন্য এটি কনফিগার করতে পারেন, উদাহরণস্বরূপ, Collapsedসত্য এবং Visibleমিথ্যা ব্যবহার করুন:

<Application.Resources>
    <app:BooleanToVisibilityConverter 
        x:Key="BooleanToVisibilityConverter" 
        True="Collapsed" 
        False="Visible" />
</Application.Resources>

আপনি যখন বুলিয়ান সম্পত্তি IsHiddenহিসাবে বিরোধী হিসাবে বাঁধতে চান তখন এই বিপরীতটি কার্যকর IsVisible


আমি হয়ত কিছু মিস করছি, তবে আপনার কি কেবল একটি অবহেলিত সম্পত্তি দরকার নেই? stackoverflow.com/questions/534575/...
OscarRyz

9
@ অস্কার রাইজ: আরও জটিল ইউআই-এর সাথে, ভিউ মডেলগুলিতে সত্যই বিরক্তিকর গোলমাল যুক্ত হতে শুরু করে, কোড কভারেজটি বজায় রাখার জন্য আপনাকে তাত্ত্বিকভাবে ইউনিট টেস্টে থাকা অন্য কোনও সম্পত্তি উল্লেখ না করা। মডেল দৃশ্য খুঁজে পাওয়ার থাকা উচিত নয় যে দৃশ্য বাস্তবায়ন বিবরণ পাসে, অন্যথায় আপনি হিসাবে ভাল শুধু থাকতে পারে Visibilityআপনার ভিউ মডেল বৈশিষ্ট্য।
অ্যারোনআউট

এটি এত সহজ, তবে উল্লেখযোগ্যভাবে সহায়ক। ধন্যবাদ @ আতিফআজিয
TheLastGIS

48
using System;
using System.Globalization;
using System.Windows;
using System.Windows.Data;

public sealed class BooleanToVisibilityConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        var flag = false;
        if (value is bool)
        {
            flag = (bool)value;
        }
        else if (value is bool?)
        {
            var nullable = (bool?)value;
            flag = nullable.GetValueOrDefault();
        }
        if (parameter != null)
        {
            if (bool.Parse((string)parameter))
            {
                flag = !flag;
            }
        }
        if (flag)
        {
            return Visibility.Visible;
        }
        else
        {
            return Visibility.Collapsed;
        }
    }

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
    {
        var back = ((value is Visibility) && (((Visibility)value) == Visibility.Visible));
        if (parameter != null)
        {
            if ((bool)parameter)
            {
                back = !back;
            }
        }
        return back;
    }
}

এবং তারপরে কনভার্টারপ্যারামিটার হিসাবে একটি সত্য বা মিথ্যা পাস করুন

       <Grid.Visibility>
                <Binding Path="IsYesNoButtonSetVisible" Converter="{StaticResource booleanToVisibilityConverter}" ConverterParameter="true"/>
        </Grid.Visibility>

4
else if (value is bool?)অংশ, ReSharper আমাকে বলে "এক্সপ্রেশন সবসময় মিথ্যা"। এছাড়াও, if (flag)অংশটি আরও সংক্ষিপ্তভাবে পুনরায় লেখা যেতে পারে return flag ? Visibility.Visible : Visibility.Collapsed;
ড্যানিলো বার্জেন

1
আমি হয়ত কিছু মিস করছি, তবে আপনার কি কেবল একটি অবহেলিত সম্পত্তি দরকার নেই? stackoverflow.com/questions/534575/...
OscarRyz

1
var nullable = (bool?)value; flag = nullable.GetValueOrDefault();অনেক খাটো এবং সহজ করা যেতে পারে:flag = (bool?)value ?? false;
ANeves

45

আপনার নিজের লেখাই আপাতত সেরা সমাধান। এখানে এমন একটি রূপান্তরকারীর উদাহরণ রয়েছে যা সাধারণ এবং উল্টানো উভয় উপায়ে করতে পারে। এ নিয়ে যদি আপনার কোন সমস্যা থাকে তবে জিজ্ঞাসা করুন।

[ValueConversion(typeof(bool), typeof(Visibility))]
public class InvertableBooleanToVisibilityConverter : IValueConverter
{
    enum Parameters
    {
        Normal, Inverted
    }

    public object Convert(object value, Type targetType,
                          object parameter, CultureInfo culture)
    {
        var boolValue = (bool)value;
        var direction = (Parameters)Enum.Parse(typeof(Parameters), (string)parameter);

        if(direction == Parameters.Inverted)
            return !boolValue? Visibility.Visible : Visibility.Collapsed;

        return boolValue? Visibility.Visible : Visibility.Collapsed;
    }

    public object ConvertBack(object value, Type targetType,
        object parameter, CultureInfo culture)
    {
        return null;
    }
}
<UserControl.Resources>
  <Converters:InvertableBooleanToVisibilityConverter x:Key="_Converter"/>
</UserControl.Resources>

<Button Visibility="{Binding IsRunning, Converter={StaticResource _Converter}, ConverterParameter=Inverted}">Start</Button>

2
শুধু একটা জিনিস ভাবছি। এক্সএএমএল কোড "বাইন্ডিং ইসরানিং", "ইসরানিং" অবজেক্টের স্যুরকোড বা মান কোথায়?
27-

ইসরুনিং আমার ভিউ মডেলের একটি সম্পত্তি। এই কোডটির প্রসঙ্গটি দীর্ঘ তবে এটির সংক্ষিপ্ততাটি হ'ল আমি যখন কিছু গণনা চালিয়ে যাচ্ছিলাম এবং অন্যান্য জিনিসগুলি গোপন করা হয়নি তখন আমার কিছু লুকানো দরকার ছিল। আমি এটি তৈরি করতে এই রূপান্তরকারীটি তৈরি করেছি যাতে আমার ভিউ মডেলটিতে আমার একাধিক বৈশিষ্ট্য না থাকে।
মাইকেল হোলিয়াস

2
BooleanToVisibilityConverterনাল জন্য প্যারামিটার পরীক্ষা করে আপনি এটিকে স্বাভাবিকের জন্য একটি ড্রপ-ইন প্রতিস্থাপন করতে পারেন :Parameter direction = Parameter.Normal; if (parameter != null) direction = (Parameter)Enum.Parse(typeof(Parameter), (string)parameter);
JCH2k

20

এর রয়েছে WPF কনভার্টার Codeplex প্রকল্প। তাদের ডকুমেন্টেশনে তারা বলেছে আপনি ভিজিবিলিটি এনুমারেশন থেকে বিলে রূপান্তর করতে তাদের ম্যাপকোনভার্টার ব্যবহার করতে পারেন

<Label>
    <Label.Visible>
        <Binding Path="IsVisible">
            <Binding.Converter>
                <con:MapConverter>
                    <con:Mapping From="True" To="{x:Static Visibility.Visible}"/>
                    <con:Mapping From="False" To="{x:Static Visibility.Hidden}"/>
                </con:MapConverter>
            </Binding.Converter>
        </Binding>
    </Label.Visible>
</Label>

1
ডাব্লুপিএফ রূপান্তরকারীগুলিতে এখন একটি বুলিয়ান টোভিজিবিলিটি কনভার্টার অন্তর্ভুক্ত যা বিপরীত হতে পারে।
বিনোদ

17

এক্সএএমএল কন্ট্রোল ভিজিবিলিটি প্রোপার্টি সহ ভিউমোডেল বুলিয়ান মান (ইসবটনভিজিবিল) বাঁধাইয়ের আরও একটি উপায়। কোনও কোডিং নেই, রূপান্তরকারী নয়, কেবল স্টাইলিং।

<Style TargetType={x:Type Button} x:Key="HideShow">
   <Style.Triggers>
      <DataTrigger Binding="{Binding IsButtonVisible}" Value="False">
          <Setter Property="Visibility" Value="Hidden"/>
      </DataTrigger>
   </Style.Triggers>
</Style>

<Button Style="{StaticResource HideShow}">Hello</Button>

15

বা আসল অলস মনুষ্যত্বের উপায়, ইতিমধ্যে যা আছে তা ব্যবহার করুন এবং এটিকে সরিয়ে দিন:

public class InverseBooleanToVisibilityConverter : IValueConverter
{
    private BooleanToVisibilityConverter _converter = new BooleanToVisibilityConverter();

    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        var result = _converter.Convert(value, targetType, parameter, culture) as Visibility?;
        return result == Visibility.Collapsed ? Visibility.Visible : Visibility.Collapsed;
    }

    public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        var result = _converter.ConvertBack(value, targetType, parameter, culture) as bool?;
        return result == true ? false : true;
    }
}

5

আপনি যদি কাস্টম রূপান্তর লেখার পছন্দ না করেন তবে আপনি এটি সমাধান করতে ডেটা ট্রিগার ব্যবহার করতে পারেন:

<Style.Triggers>
        <DataTrigger Binding="{Binding YourBinaryOption}" Value="True">
                 <Setter Property="Visibility" Value="Visible" />
        </DataTrigger>
        <DataTrigger Binding="{Binding YourBinaryOption}" Value="False">
                 <Setter Property="Visibility" Value="Collapsed" />
        </DataTrigger>
</Style.Triggers>

3

আমি এই সম্পর্কে একটি পোস্ট করেছি। মাইকেল হোহলিওসের মতো আমিও একই ধারণা ব্যবহার করেছি। কেবলমাত্র, আমি "অবজেক্ট প্যারামিটার" ব্যবহারের পরিবর্তে সম্পত্তি ব্যবহার করেছি।



প্রোপার্টি ব্যবহার করে ডাব্লুপিএফ-এ একটি বুলি মানের সাথে দৃশ্যমানতা বাঁধাই আমার মতে এটি আরও পাঠযোগ্য।

<local:BoolToVisibleOrHidden x:Key="BoolToVisConverter" Collapse="True" Reverse="True" />

আমার নিজের মন্তব্যে কেবলমাত্র একটি ফলোআপ। আপনি যদি বৈশিষ্ট্যগুলি ব্যবহার করেন, আপনি যদি রূপান্তরকারীগুলিতে তৈরি করতে চান তবে আপনাকে একটি পৃথক অবজেক্ট তৈরি করতে হবে, এটি একটি বিপরীত এবং একটি নয়। আপনি যদি প্যারামিটার ব্যবহার করেন তবে আপনি একাধিক আইটেমের জন্য একটি অবজেক্ট ব্যবহার করতে পারেন তবে আপনি মনোযোগ না দিলে বিভ্রান্তিকর হতে পারে। সুতরাং উভয় ভাল এবং বুদ্ধি আছে।
ছড়া

আমি রঙিন রূপান্তরকারীগুলিতে বুলিয়ান উপলব্ধিতে এটি খুব সহায়ক বলে মনে করেছি। আপনাকে ধন্যবাদ
ফেডারিনিক

3

এখানে আমি লিখেছি এবং অনেক ব্যবহার করি। এটি একটি বুলিয়ান রূপান্তরকারী প্যারামিটার ব্যবহার করে যা মানটিকে উল্টাতে হবে কিনা তা নির্দেশ করে এবং এরপরে প্রত্যাখ্যান করার জন্য এক্সওআর ব্যবহার করে:

[ValueConversion(typeof(bool), typeof(System.Windows.Visibility))]
public class BooleanVisibilityConverter : IValueConverter
{
    System.Windows.Visibility _visibilityWhenFalse = System.Windows.Visibility.Collapsed;

    /// <summary>
    /// Gets or sets the <see cref="System.Windows.Visibility"/> value to use when the value is false. Defaults to collapsed.
    /// </summary>
    public System.Windows.Visibility VisibilityWhenFalse
    {
        get { return _visibilityWhenFalse; }
        set { _visibilityWhenFalse = value; }
    }

    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        bool negateValue;
        Boolean.TryParse(parameter as string, out negateValue);

        bool val = negateValue ^ System.Convert.ToBoolean(value); //Negate the value when negateValue is true using XOR
        return val ? System.Windows.Visibility.Visible : _visibilityWhenFalse;
    }

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
    {
        bool negateValue;
        Boolean.TryParse(parameter as string, out negateValue);

        if ((System.Windows.Visibility)value == System.Windows.Visibility.Visible)
            return true ^ negateValue;
        else
            return false ^ negateValue;
    }
}

রেফারেন্সের জন্য এখানে একটি এক্সওআর সত্যের ছক রয়েছে:

        XOR
        x  y  XOR
        ---------
        0  0  0
        0  1  1
        1  0  1
        1  1  0

2

আমি আরও সাধারণ উত্তর খুঁজছিলাম, কিন্তু এটি খুঁজে পেলাম না। আমি একটি কনভার্টার লিখেছি যা অন্যকে সাহায্য করতে পারে।

এটি আমাদের ছয়টি পৃথক কেস পৃথক করা প্রয়োজন যে উপর ভিত্তি করে:

  • সত্য 2 দৃশ্যমান, মিথ্যা 2 লুকানো
  • সত্য 2 টি দৃশ্যমান, ভুয়া 2 টি সঙ্কুচিত হয়েছে
  • সত্য 2 লুকানো, মিথ্যা 2 দৃশ্যমান
  • সত্য 2 টি সঙ্কুচিত, মিথ্যা 2 দৃশ্যমান
  • সত্য 2 লুকানো, মিথ্যা 2 সংক্ষিপ্ত হয়েছে
  • সত্য 2 টি সঙ্কুচিত, মিথ্যা 2 লুকানো

প্রথম 4 টি ক্ষেত্রে এটি আমার বাস্তবায়ন:

[ValueConversion(typeof(bool), typeof(Visibility))]
public class BooleanToVisibilityConverter : IValueConverter
{
    enum Types
    {
        /// <summary>
        /// True to Visible, False to Collapsed
        /// </summary>
        t2v_f2c,
        /// <summary>
        /// True to Visible, False to Hidden
        /// </summary>
        t2v_f2h,
        /// <summary>
        /// True to Collapsed, False to Visible
        /// </summary>
        t2c_f2v,
        /// <summary>
        /// True to Hidden, False to Visible
        /// </summary>
        t2h_f2v,
    }
    public object Convert(object value, Type targetType,
                          object parameter, CultureInfo culture)
    {
        var b = (bool)value;
        string p = (string)parameter;
        var type = (Types)Enum.Parse(typeof(Types), (string)parameter);
        switch (type)
        {
            case Types.t2v_f2c:
                return b ? Visibility.Visible : Visibility.Collapsed; 
            case Types.t2v_f2h:
                return b ? Visibility.Visible : Visibility.Hidden; 
            case Types.t2c_f2v:
                return b ? Visibility.Collapsed : Visibility.Visible; 
            case Types.t2h_f2v:
                return b ? Visibility.Hidden : Visibility.Visible; 
        }
        throw new NotImplementedException();
    }

    public object ConvertBack(object value, Type targetType,
        object parameter, CultureInfo culture)
    {
        var v = (Visibility)value;
        string p = (string)parameter;
        var type = (Types)Enum.Parse(typeof(Types), (string)parameter);
        switch (type)
        {
            case Types.t2v_f2c:
                if (v == Visibility.Visible)
                    return true;
                else if (v == Visibility.Collapsed)
                    return false;
                break;
            case Types.t2v_f2h:
                if (v == Visibility.Visible)
                    return true;
                else if (v == Visibility.Hidden)
                    return false;
                break;
            case Types.t2c_f2v:
                if (v == Visibility.Visible)
                    return false;
                else if (v == Visibility.Collapsed)
                    return true;
                break;
            case Types.t2h_f2v:
                if (v == Visibility.Visible)
                    return false;
                else if (v == Visibility.Hidden)
                    return true;
                break;
        }
        throw new InvalidOperationException();
    }
}

উদাহরণ:

Visibility="{Binding HasItems, Converter={StaticResource BooleanToVisibilityConverter}, ConverterParameter='t2v_f2c'}"

আমি মনে করি পরামিতিগুলি মনে রাখা সহজ।

আশা করি এটি কারও সাহায্য করবে।


2

আপনি কুইকনভার্টার ব্যবহার করতে পারেন ।

কুইক কনভার্টারের সাহায্যে আপনি আপনার বন্ডিংএক্সপ্রেসনের মাধ্যমে রূপান্তরকারী যুক্তিকে ইনলাইন লিখতে পারেন

এখানে একটি উল্টানো বুলিয়ান টোভিজিবিলিটি রূপান্তরকারী রয়েছে:

Visibility="{qc:Binding '!$P ? Visibility.Visible : Visibility.Collapsed', P={Binding Example}}"

আপনি নিউগেটের মাধ্যমে কুইকনভার্টার যুক্ত করতে পারেন। সেটআপের জন্য ডকুমেন্টেশনগুলি একবার দেখুন। লিঙ্ক: https://quickconverter.codeplex.com/


1

আপনার নিজস্ব রূপান্তর লিখুন।

public class ReverseBooleanToVisibilityConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
   {
       // your converter code here
   }
}

0

একটি সহজ ওয়ান ওয়ে সংস্করণ যা এটির মতো ব্যবহার করা যেতে পারে:

Visibility="{Binding IsHidden, Converter={x:Static Ui:Converters.BooleanToVisibility}, ConverterParameter=true}

এভাবে প্রয়োগ করা যেতে পারে:

public class BooleanToVisibilityConverter : IValueConverter
{
  public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
  {
    var invert = false;

    if (parameter != null)
    {
      invert = Boolean.Parse(parameter.ToString());
    }

    var booleanValue = (bool) value;

    return ((booleanValue && !invert) || (!booleanValue && invert)) 
      ? Visibility.Visible : Visibility.Collapsed;
  }

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

0

সবকিছুকে সবকিছুতে রূপান্তর করুন (বুল, স্ট্রিং, এনাম ইত্যাদি):

public class EverythingConverterValue
{
    public object ConditionValue { get; set; }
    public object ResultValue { get; set; }
}

public class EverythingConverterList : List<EverythingConverterValue>
{

}

public class EverythingConverter : IValueConverter
{
    public EverythingConverterList Conditions { get; set; } = new EverythingConverterList();

    public object NullResultValue { get; set; }
    public object NullBackValue { get; set; }

    public object Convert(object value, Type targetType,
        object parameter, CultureInfo culture)
    {
        return Conditions.Where(x => x.ConditionValue.Equals(value)).Select(x => x.ResultValue).FirstOrDefault() ?? NullResultValue;
    }
    public object ConvertBack(object value, Type targetType,
        object parameter, CultureInfo culture)
    {
        return Conditions.Where(x => x.ResultValue.Equals(value)).Select(x => x.ConditionValue).FirstOrDefault() ?? NullBackValue;
    }
}

এক্সএএমএল উদাহরণ:

<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
                xmlns:conv="clr-namespace:MvvmGo.Converters;assembly=MvvmGo.WindowsWPF"
                xmlns:sys="clr-namespace:System;assembly=mscorlib">

<conv:EverythingConverter x:Key="BooleanToVisibilityConverter">
    <conv:EverythingConverter.Conditions>
        <conv:EverythingConverterValue ResultValue="{x:Static Visibility.Visible}">
            <conv:EverythingConverterValue.ConditionValue>
                <sys:Boolean>True</sys:Boolean>
            </conv:EverythingConverterValue.ConditionValue>
        </conv:EverythingConverterValue>
        <conv:EverythingConverterValue ResultValue="{x:Static Visibility.Collapsed}">
            <conv:EverythingConverterValue.ConditionValue>
                <sys:Boolean>False</sys:Boolean>
            </conv:EverythingConverterValue.ConditionValue>
        </conv:EverythingConverterValue>
    </conv:EverythingConverter.Conditions>

</conv:EverythingConverter>

<conv:EverythingConverter x:Key="InvertBooleanToVisibilityConverter">
    <conv:EverythingConverter.Conditions>
        <conv:EverythingConverterValue ResultValue="{x:Static Visibility.Visible}">
            <conv:EverythingConverterValue.ConditionValue>
                <sys:Boolean>False</sys:Boolean>
            </conv:EverythingConverterValue.ConditionValue>
        </conv:EverythingConverterValue>
        <conv:EverythingConverterValue ResultValue="{x:Static Visibility.Collapsed}">
            <conv:EverythingConverterValue.ConditionValue>
                <sys:Boolean>True</sys:Boolean>
            </conv:EverythingConverterValue.ConditionValue>
        </conv:EverythingConverterValue>
    </conv:EverythingConverter.Conditions>
</conv:EverythingConverter>

<conv:EverythingConverter x:Key="MarriedConverter" NullResultValue="Single">
    <conv:EverythingConverter.Conditions>
        <conv:EverythingConverterValue ResultValue="Married">
            <conv:EverythingConverterValue.ConditionValue>
                <sys:Boolean>True</sys:Boolean>
            </conv:EverythingConverterValue.ConditionValue>
        </conv:EverythingConverterValue>
        <conv:EverythingConverterValue ResultValue="Single">
            <conv:EverythingConverterValue.ConditionValue>
                <sys:Boolean>False</sys:Boolean>
            </conv:EverythingConverterValue.ConditionValue>
        </conv:EverythingConverterValue>
    </conv:EverythingConverter.Conditions>
    <conv:EverythingConverter.NullBackValue>
        <sys:Boolean>False</sys:Boolean>
    </conv:EverythingConverter.NullBackValue>
</conv:EverythingConverter>


0

নিজের কোড / পুনর্নবীকরণের পরিবর্তে ক্যালকবাইন্ডিং ব্যবহার করে বিবেচনা করুন :

Automatic two way convertion of bool expression to Visibility and back if target property has such type: description

    <Button Visibility="{c:Binding !IsChecked}" /> 
    <Button Visibility="{c:Binding IsChecked, FalseToVisibility=Hidden}" />

ক্যালকাবাইন্ডিং অন্যান্য অন্যান্য পরিস্থিতিতেও বেশ কার্যকর।


-2

আমি জানি এটি তারিখযুক্ত, তবে, আপনাকে কোনও কিছুর পুনরায় প্রয়োগের দরকার নেই।

আমি যা করেছি তা হ'ল সম্পত্তির মূল্যটিকে তুচ্ছ করা:

<!-- XAML code -->
<StackPanel Name="x"  Visibility="{Binding    Path=Specials, ElementName=MyWindow, Converter={StaticResource BooleanToVisibilityConverter}}"></StackPanel>    
<StackPanel Name="y"  Visibility="{Binding Path=NotSpecials, ElementName=MyWindow, Converter={StaticResource BooleanToVisibilityConverter}}"></StackPanel>        

....

//Code behind
public bool Specials
{
    get { return (bool) GetValue(SpecialsProperty); }
    set
    {
        NotSpecials= !value; 
        SetValue(SpecialsProperty, value);
    }
}

public bool NotSpecials
{
    get { return (bool) GetValue(NotSpecialsProperty); }
    set { SetValue(NotSpecialsProperty, value); }
}

এবং এটি ঠিক কাজ করে!

আমি কিছু অনুপস্থিত করছি?


7
আপনি মনে করেন এটি একটি সহজ সমাধান, এবং একটি একক সম্পত্তির জন্য এটি এমনকি কেসও হতে পারে (এটি একাধিক বৈশিষ্ট্যের জন্য পুনরায় ব্যবহারযোগ্য নয়, আপনাকে প্রত্যেকটির জন্য এটি প্রয়োগ করতে হবে)। আমি মনে করি এটি বাস্তবায়নের জন্য যদিও এটি ভুল জায়গা, কারণ এর ভিউমোডেল / কোডবিহিন্ড এবং ভিউয়ের সাথে সমস্ত কিছুই করার নেই do
মাইক ফুচস
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.