相关疑难解决方法(0)

在依赖属性中获取'this'指针会改变回调

我在类中有以下依赖属性:

class FooHolder
{
    public static DependencyProperty CurrentFooProperty = DependencyProperty.Register(
        "CurrentFoo",
        typeof(Foo), 
        typeof(FooHandler),
        new PropertyMetadata(OnCurrentFooChanged));

    private static void OnCurrentFooChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
    {
        FooHolder holder = (FooHolder) d.Property.Owner; // <- something like this

        // do stuff with holder
    }
}
Run Code Online (Sandbox Code Playgroud)

我需要能够检索对更改的属性所属的类实例的引用.

这是因为FooHolder有一些事件处理程序需要在属性值更改时挂钩/取消挂钩.属性更改回调必须是静态的,但事件处理程序不是.

c# dependency-properties

11
推荐指数
1
解决办法
4593
查看次数

与转换器的双向数据绑定不会更新源

我有一个数据绑定设置与转换器,以将一个笨拙的XML源转换为显示和编辑方便的内部类树.一切都非常适合从XML源读取,但我有一段时间试图对内部类进行更改以传播回XML源.

这是使用网站的XAML:

        <local:SampleConverter x:Key="SampleConverter" />
        <Expander Header="Sample" >
            <local:SampleControl 
                Sample="{Binding Path=XmlSource, 
                                 Converter={StaticResource SampleConverter}, 
                                 Mode=TwoWay}" />
        </Expander>
Run Code Online (Sandbox Code Playgroud)

XmlSource是父数据绑定对象的CLR读写属性(不是DependencyProperty).它是从XSD生成的.NET类型.

SampleConverter实现IValueConverter.Convert调用该方法并返回非空数据,但从ConvertBack不调用该方法.

SampleControl是一个UserControl,它封装了与Sample数据树的UI交互.这是XAML看起来像这样:

<UserControl x:Class="SampleControl">
    [... other stuff ...]

    <UserControl.Content>
        <Binding Path="Sample" RelativeSource="{RelativeSource Mode=Self}" Mode="TwoWay" TargetNullValue="{StaticResource EmptySampleText}" />
    </UserControl.Content>

    <UserControl.ContentTemplateSelector>
        <local:BoxedItemTemplateSelector />
    </UserControl.ContentTemplateSelector>
</UserControl>
Run Code Online (Sandbox Code Playgroud)

Sample属性是SampleControl代码中的DependencyProperty:

public static readonly DependencyProperty SampleProperty =
    DependencyProperty.Register("Sample", typeof(SampleType), typeof(SampleControl), new PropertyMetadata(new PropertyChangedCallback(OnSampleChanged)));

public SampleType Sample
{
    get { return (SampleType)GetValue(SampleProperty); }
    set { SetValue(SampleProperty, value); }
}

private static void OnSampleChanged(DependencyObject d, DependencyPropertyChangedEventArgs …
Run Code Online (Sandbox Code Playgroud)

c# data-binding wpf xaml two-way-binding

5
推荐指数
1
解决办法
4649
查看次数