C# 如何从XAML引用静态类字段

C# 如何从XAML引用静态类字段,c#,wpf,xaml,multibinding,C#,Wpf,Xaml,Multibinding,我的XAML引用了以下类: public static class SearchVariables { public static DataGridCellInfo current_cell_match; public static string current_cell_property; public static void setCurrentCell(Object dgi, DataGridColumn dgc, string property_name)

我的XAML引用了以下类:

public static class SearchVariables
{
    public static DataGridCellInfo current_cell_match;
    public static string current_cell_property;

    public static void setCurrentCell(Object dgi, DataGridColumn dgc, string property_name)
    {
        current_cell_property = property_name;
        if (property_name == null)
        {
            current_cell_match = new DataGridCellInfo();
        }
        else
        {
            current_cell_match = new DataGridCellInfo(dgi, dgc);
        }
    }
}
我想做的是设置一个多绑定转换器,当它发生变化时使用当前单元格匹配。我有以下内容,但它抛出了一个错误,可能需要一些帮助来解决这个问题

<Setter Property="helpers:SearchBehaviours.IsTextMatchFocused">
    <Setter.Value>
        <MultiBinding Converter="{StaticResource SelectedSearchValueConverter}" FallbackValue="False">
            <Binding Path="(helpers:SearchBehaviours.IsFindPopupOpen)" RelativeSource="{RelativeSource Self}"/>
            <Binding Path="(helpers:SearchVariables.current_cell_match)" />
        </MultiBinding>
    </Setter.Value>
</Setter>

[编辑]


应该提到的是,这个类包含一系列附加的属性和行为,因此它位于UI端。这些行为之一设置当前的\u单元格\u匹配。

要绑定到静态类中的静态属性,请尝试以下操作:

<Binding Source="{x:Static helpers:SearchVariables.current_cell_match}" />

快乐编码:-)

静态成员在属性更改方面可能存在问题。请看一下我刚才问的问题:


Mabe x:Shared将帮助您。

用于从XAML访问静态字段。它会引发什么错误?@RohitVats我尝试了Casper下面的示例,但运气不好,您有没有示例?“helpers:SearchVariables”成员无效,因为它没有符合条件的类型名称无法找到成员“SearchVariables”在目标类型上。我为这个错误道歉@Hank。我已将我的答案更新为正确的静态绑定。谢谢。错误已清除。有趣的是,我刚刚在你的扩展答案上创建了一个问题,如果你愿意,你也可以把答案放在那里。所以我有多个行为类,它们都可以访问这个单例类吗?实际上我想我明白了,它就像一个内部类,但是如果我把我所有的行为类放在一个父类中,我就不能完成上面的工作吗?是的,你所有的行为类都可以访问singleton实例并绑定到它的属性(如果需要的话)。使用x:Shared时出错。。。XML命名空间“”中不存在标记“Shared”
<Binding Source="{x:Static local:MyClass.Instance}" Path="MyInt" />
public class MyClass : INotifyPropertyChanged
{
    private Random random;

    private int m_MyInt;
    public int MyInt
    {
        get
        {
            return m_MyInt;
        }
        set
        {
            if ( m_MyInt == value )
            {
               return;
            }

            m_MyInt = value;
            NotifyPropertyChanged();
        }
    }

    private static MyClass m_Instance;
    public static MyClass Instance
    {
        get
        {
            if ( m_Instance == null )
            {
                m_Instance = new MyClass();
            }

            return m_Instance;
         }
    }

    private MyClass()
    {
        random = new Random();
        m_MyInt = random.Next( 0, 100 );

        Timer timer = new Timer();
        timer.Interval = 1000;
        timer.Elapsed += timer_Elapsed;
        timer.Start();
    }

    private void timer_Elapsed( object sender, ElapsedEventArgs e )
    {
        MyInt = random.Next( 0, 100 );
    }

    #region INotifyPropertyChanged Members

    public event PropertyChangedEventHandler PropertyChanged;

    private void NotifyPropertyChanged( [CallerMemberName] String propertyName = "" )
    {
        if ( PropertyChanged != null )
        {
            PropertyChanged( this, new PropertyChangedEventArgs( propertyName ) );
        }
    }

    #endregion
}