gpt4 book ai didi

c# - 绑定(bind)内部绑定(bind) WPF

转载 作者:行者123 更新时间:2023-11-30 20:43:46 26 4
gpt4 key购买 nike

我有一个项目字典,我想在组合框中显示项目的一个方面 - 全部采用 MVVM 模式。在这方面,我将我的 Model 定义为:

public class Model
{
public Dictionary<UInt32, string> samples { set; get; }
}

和我的 ViewModel 为:

internal class ViewModel : INotifyPropertyChanged
{
public ViewModel()
{
var smpls = new Dictionary<UInt32, string>();
smpls.Add(1, "one");
smpls.Add(2, "two");
models = new Dictionary<string, Model>();
models.Add("aKey", new Model() { samples = smpls });

key = "aKey";
}

private Dictionary<string, Model> _models;
public Dictionary<string, Model> models { set { _models = value; } get { return _models; } }

private string _key;
public string key { set { _key = value; OnPropertyChanged("key"); } get { return _key; } }

public event PropertyChangedEventHandler PropertyChanged;
protected void OnPropertyChanged(string name)
{
PropertyChangedEventHandler handler = PropertyChanged;
if (handler != null)
{
handler(this, new PropertyChangedEventArgs(name));
}
}
}

然后我将 models 绑定(bind)到组合框:

<Grid>
<ComboBox ItemsSource="{Binding Path=models[{Binding Path=key}].samples, Mode=OneTime}">
<ComboBox.ItemTemplate>
<DataTemplate>
<Border>
<StackPanel>
<TextBlock Text="{Binding Path=Value}" />
</StackPanel>
</Border>
</DataTemplate>
</ComboBox.ItemTemplate>
</ComboBox>
</Grid>

我将 models 字典的 Key 绑定(bind)到 viewModelkey 属性,这不起作用。但是,如果我按照以下方式更改代码,一切正常:

<ComboBox ItemsSource="{Binding Path=models[aKey].samples, Mode=OneTime}">

最佳答案

虽然 models[aKey].samples 是一个有效的 property path , models[{Binding Path=key}].samples 不是。您可能可以通过使用 MultiBinding 来绕过此限制。使用适当的值转换器。

然而,创建一个额外的 View 模型属性会容易得多,例如下面所示的 CurrentSamples 属性,只要 key 属性发生变化,它就会更新:

public Dictionary<UInt32, string> CurrentSamples
{
get { return models[key].samples; }
}

public string key
{
get { return _key; }
set
{
_key = value;
OnPropertyChanged("key");
OnPropertyChanged("CurrentSamples");
}
}

然后像这样绑定(bind) ItemsSource:

<ComboBox ItemsSource="{Binding CurrentSamples}">
...
</ComboBox>

关于c# - 绑定(bind)内部绑定(bind) WPF,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30105353/

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