我正在开发一个从后端获取数据的项目,即数据不断动态变化,前端不必关心。 我需要将这些数据暴露给wpf,以便有人可以通过表达式混合将事物绑定到wpf中的数据。 Readonly很好。 简而言之,如果我的控制流程大致如下,如何在类型为“Foo”的类“foo”的实例中对属性Foostring进行数据绑定:
public partial class Window1 : window
{
public Window1()
{
InitializeComponent();
Foo foo = new foo;
}
// my text box is defined in the xaml of this window.
}
public ref class Foo
{
Foo()
{
FooProperty = "work,dammit";
}
private string _foostring="";
public string FooProperty
{
get {return _foostring;}
set {foostring=value;}
}
}
如果在Foo类的构造函数中我在文本框中设置了绑定,并且我从INotifyPropertyChanged继承并在FooProperty的设置上引发事件,那么我可以开始工作。 但是,这不会将此变量暴露给表达式混合 - 它并不是真正设置数据源。我试图在xaml中设置绑定,它编译但不更新。 任何帮助将不胜感激!
答案 0 :(得分:1)
[Rokujolady回答]
对于后代,我发布了解决方案:
当我应该从xaml实例化时,我正在从c#实例化对象foo,因为xaml正在创建自己的实例,因为我正在更新c#实例化实例,所以它没有被更新。显然你不能从xaml引用在c#中创建的对象,但你可以引用从c#在xaml中创建的对象。代码最终如下:
XAML:
<Window.Resources>
<local:Foo x:Name "foo" x:Key="FooDataSource" d:IsDataSource="True"/>
...
</Window.Resources>
<Grid x:name="blah">
<Grid DataContext="{Binding Source={StaticResource FooDataSource}}">
<TextBlock x:Name="myText" Text="{Binding FooProperty, Mode=Default}"></TextBlock></Grid>
C#代码看起来像这样:
public partial class Window1:window
{
Foo myFooVariable = null;
public Window1()
{
InitializeComponent();
myFooVariable = this.Resources["FooDataSource"] as Foo;
myFooVariable.FooString = "Work, Dammit";
}
}