C# 在代码隐藏中重新分配StaticResource的值

C# 在代码隐藏中重新分配StaticResource的值,c#,wpf,data-binding,C#,Wpf,Data Binding,我正在从文件加载数据,并希望将其分配给视图。我在XAML中使用StaticResource绑定类型,因为在定义视图时在其中导航更容易 如何将XAML中定义的StaticResource的值重新分配给刚才加载的数据 XAML: <Window.Resources> <local:Container x:Key="Container"/> </Window.Resources> <Grid> <ComboBox Name="Com

我正在从文件加载数据,并希望将其分配给视图。我在XAML中使用StaticResource绑定类型,因为在定义视图时在其中导航更容易

如何将XAML中定义的StaticResource的值重新分配给刚才加载的数据

XAML:

<Window.Resources>
    <local:Container x:Key="Container"/>
</Window.Resources>
<Grid>
    <ComboBox Name="Combo" 
              ItemsSource="{Binding Source={StaticResource Container}}" 
              HorizontalAlignment="Left" VerticalAlignment="Top"/>
</Grid>

代码隐藏:

public class Container : ObservableCollection<string>
{
    public Container()
    {
        Add("AAA");
    }
}

public partial class MainWindow : Window
{
    public MainWindow()
    {
        InitializeComponent();

        Container resource = FindResource("Container") as Container;

        Container container2 = new Container() { "BBB" };

        resource = container2;
    }
}
公共类容器:ObservableCollection
{
公共容器()
{
添加(“AAA”);
}
}
公共部分类主窗口:窗口
{
公共主窗口()
{
初始化组件();
容器资源=FindResource(“容器”)作为容器;
Container container2=新容器(){“BBB”};
资源=容器2;
}
}
这里,组合框应该有“AAA”和“BBB”,但后面的代码并没有改变它。我无法将其设置为DynamicSource,使用INotifyPropertyChanged接口也没有帮助


当然做
Combo.ItemsSource=container2
可以工作,但它会强制我在代码隐藏中设置视图元素的所有绑定。然后如何为所有需要类层次结构顶层数据的子元素设置RelativeSource绑定,也就是说,现在我可以做
{Binding Source={StaticResource Container},Path=TopClass.AnotherCollection.Value}
在子元素中。

这是用另一个
容器
实例替换实际资源的方法:

this.Resources["Container"] = container2;
但这样做不会影响组合框,除非在XAML标记中使用
DynamicResource

<ComboBox Name="Combo" 
          ItemsSource="{DynamicResource Container}" 
          HorizontalAlignment="Left" VerticalAlignment="Top"/>


StaticResource
标记扩展名的值只解析一次。

如果要将数据分配给视图,请使用DataContext属性。WPF绑定已针对它进行了调优。而且它可以在运行时轻松更改。对于设计时intellisense支持,请使用设计时datacontext()@ASh,然后如何绑定需要来自父级datacontext之外某个位置的数据的子元素?RelativeSource有意义吗?或者我必须在代码中设置所有这些绑定吗?如果你想要详细的答案,首先你应该自己提供更多的细节@死鱼:你试过这个吗?