gpt4 book ai didi

c# - wpf 附加属性不起作用

转载 作者:行者123 更新时间:2023-11-30 21:55:41 25 4
gpt4 key购买 nike

我只是想将参数传递给控件。但它抛出错误“输入字符串的格式不正确。”为什么?* *

XAML

<Views:SomeView  SecurityId="abc"></Views:SomeView>

型号:

class Data
{
public string Case { get; set; }
public Data(int _input)
{
if (_input==1)
{
Case = "First";
}
else
{
Case = "Second";
}
}
}

View 模型:

class DataViewModel
{
public string GetData
{
get
{
return D.Case;
}

set
{
D.Case = value;
}
}

public Data D;
public DataViewModel(string i)
{
D = new Data(Convert.ToInt16(i));
}

}

主窗口

public partial class SomeView : UserControl
{
public string SecurityId
{
get
{
return (string)GetValue(SecurityIdProperty);
}
set { SetValue(SecurityIdProperty, value); }
}
public static readonly DependencyProperty
SecurityIdProperty =
DependencyProperty.Register("SecurityId",
typeof(string), typeof(SomeView),
new PropertyMetadata(""));

public SomeView()
{
DataContext = new DataViewModel(SecurityId);
InitializeComponent();
}
}

最佳答案

你从来没有听过变化。

您使用构造函数调用时 SecurityId 的值构造您的 DataViewModel。这是默认的 ""。然后通过 XAML 将值更改为 "abc"。但这种变化并没有转移到任何地方。它发生了,没有人在乎。 DataViewModel 的构造已经完成。

你想听变化吗?我不能说。您将需要为您的依赖项属性注册一个更改处理程序。

在您的 PropertyMetaData 中,您可以将更改的事件处理程序作为第二个参数传递,例如静态方法:

public static readonly DependencyProperty
SecurityIdProperty =
DependencyProperty.Register("SecurityId",
typeof(string), typeof(SomeView),
new PropertyMetadata("", new PropertyChangedCallback(MyValueChanged)));

然后你可以有一个方法来处理变化:

private static void MyValueChanged(DependencyObject dependencyObject, DependencyPropertyChangedEventArgs eventArgs)
{
// react on changes here
}

顺便说一句,它不是附加属性。这是一个正常的依赖属性。

关于c# - wpf 附加属性不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32069427/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com