在我的程序中,我想DynamicResource
从代码隐藏中实现一个。现在我正在将 a 绑定Content
到我的数据模型中的Label
一个string
属性......
<Label Content="{Binding DataModel.StringValue}" ... />
在这个问题之后,我string
在我的数据模型中实现了这样的:
private string _stringValue = (string)Application.Current.Resources["nameOfResource"];
public string StringValue
{
get { return _cartsInSystem; }
set
{
_cartsInSystem = value;
NotifyPropertyChange(() => CartsInSystem);
}
}
我想让它每次用户更改资源字典时,这个string
值都会更新为新值。
我试图达到与这样的效果相同的效果:
<Label Content="{DynamicResource nameOfResource}" ... />
请让我知道我做错了什么,以及如何正确实现这样的事情。
更新 1:根据@HighCore 的要求,这是我的代码示例,我只能访问string
来自代码隐藏(或 C# 类)的值
(这是TreeView
我的 MainWindow 中的 ViewModel 的一部分)
//The "DisplayNames" for these nodes are created here and not accessible through xaml.
//This is because the xaml window has access to this code through it's itemsSource
private HierarchicalVM CreateCartsNode()
{
return new HierarchicalVM()
{
DisplayName = "Carts",
Children =
{
new CartConnection() { ConnectionDataModel = new CartConnectionModel(), DisplayName = "Cart Connection" },
new HierarchicalVM() {
DisplayName = "Cart Types",
Children = {
CreateCartType( new CartConfigModel() { DisplayName = "Default" }, new CartIO_Model() ),
},
Commands = { new Command(OpenAddCart) {DisplayName = "Add..."} }
}
}
};
}
这是上面的xaml TreeView
:
<!-- Tree view items & Functions -->
<TreeView ItemsSource="{Binding DataTree.Data}" ... />
更新 2:我有另一个完美的例子来说明我的问题......
我有一个绑定到我的数据模型中comboBox
的一个。像这样:itemsSource
ObservableCollection
private ObservableCollection<string> _objCollection;
private string _notUsed = "Not Used";
private string _stop = "Stop";
private string _slow = "Slow";
public DataModel()
{
ObjCollection = new ObservableCollection<string>() { _notUsed, _stop, _slow };
}
public ObservableCollection<string> ObjCollection {...}
xml:
<ComboBox ItemsSource="{Binding DataModel.ObjCollection}" ... />
如果我想让它comboBox
在资源字典更改时更改此项目,看起来我需要在 C# 而不是 xaml 中处理它。