0

こんにちは、私は MVVM モデルを使用し ています。IP コントロールについては、 http://firstbit.blogspot.com/2011/07/wpf-c-ipaddress-control.htmlに従いました。しかし、バインディングを適用すると、コントロールに表示されません。誰でも私を助けることができますか?

cs:IPAddressControl  Text="{Binding ViewData.StartIP,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}" DataContext="{Binding}" x:Name="startIPControl" Grid.Row="3" Grid.Column="1" VerticalContentAlignment="Center" OverridesDefaultStyle="False">            
    </cs:IPAddressControl> 
4

1 に答える 1

0

見た目から、コントロールは Text プロパティの依存関係プロパティを実装していないため、これが問題である可能性があります。

私の知る限り、DependencyObject の DependencyProperty にのみバインドできます。こちらをご覧ください。

http://www.codeproject.com/Articles/71348/Binding-on-a-Property-which-is-not-a-DependencyPro

提供されたリンクからコントロールの更新バージョンを送信する時間はありませんが、バインドもサポートしていないこのコントロールで何をしたかを伝えることができます。

https://wpfipaddress.codeplex.com/

そのソースをダウンロードし、IPAddressControl.xaml.csで [プロパティ] 領域を削除して、次のものに置き換えます。

    #region Text dependency property

    /// <summary>
    /// Dependency property field for TextProperty.
    /// </summary>
    public static readonly DependencyProperty TextProperty = DependencyProperty.Register("Text", typeof(string), typeof(IPAddressControl), new PropertyMetadata("0.0.0.0", new PropertyChangedCallback(OnTextPropertyChanged)));

    #region Text dependency property callbacks

    /// <summary>
    /// Dependency property TextProperty changed callback.
    /// </summary>
    /// <param name="d">Dependency object.</param>
    /// <param name="e">Event arguments.</param>
    private static void OnTextPropertyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
    {
        IPAddressControl o = d as IPAddressControl;

        // Do stuff here, then raise event for property changed.

        try
        {
            var value = e.NewValue as string;
            var splitValues = new string[4];
            if (value != null)
            {
                var splits = value.Split(new char[] { '.' }, StringSplitOptions.None);
                Array.Copy(splits, splitValues, splits.Length);
            }
            o.txtboxFirstPart.Text = splitValues[0];
            o.txtboxSecondPart.Text = splitValues[1];
            o.txtboxThridPart.Text = splitValues[2];
            o.txtboxFourthPart.Text = splitValues[3];
        }
        catch (Exception ex)
        {                
            throw new Exception("Error in IP control see inner exception!", ex);
        }

        o.RaiseTextChanged(e);
    }

    #endregion Text dependency property callbacks

    /// <summary>
    /// Gets or sets Text.
    /// </summary>
    public string Text
    {
        get { return (string)this.GetValue(IPAddressControl.TextProperty); }
        set { this.SetValue(IPAddressControl.TextProperty, value); }
    }

    /// <summary>
    /// Occurs when dependency property TextProperty changed.
    /// </summary>
    public event DependencyPropertyChangedEventHandler TextChanged;

    /// <summary>
    /// Raises TextChanged event.
    /// </summary>
    /// <param name="e">Event arguments.</param>
    protected virtual void RaiseTextChanged(DependencyPropertyChangedEventArgs e)
    {
        if (this.TextChanged != null)
            this.TextChanged(this, e);
    }

    #endregion Text dependency property
于 2013-05-23T14:32:12.933 に答える