Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/319.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 相依观测值_C#_Xaml_Mvvm_Windows 8_Winrt Xaml - Fatal编程技术网

C# 相依观测值

C# 相依观测值,c#,xaml,mvvm,windows-8,winrt-xaml,C#,Xaml,Mvvm,Windows 8,Winrt Xaml,我正在写一个Windows8应用程序。在其中,我有一个带有距离/半径的组合框。i、 例如,1英里、2英里、5英里等 但是,我希望距离单位在公里和英里之间变化,这取决于用户的偏好 在PreferencesViewModel上,我可以使用一个简单的枚举属性来定义距离单位 在主视图模型上,我可以看到一个包含半径范围的可观察集合。 因此,当主视图模型初始化时,我可以用半径填充它,在XAML视图中,我可以有一个ValueConverter,它可以简单地将当前项的首选项中的距离单位组合转换为“1英里”、“3

我正在写一个Windows8应用程序。在其中,我有一个带有距离/半径的组合框。i、 例如,1英里、2英里、5英里等

但是,我希望距离单位在公里和英里之间变化,这取决于用户的偏好

在PreferencesViewModel上,我可以使用一个简单的枚举属性来定义距离单位

在主视图模型上,我可以看到一个包含半径范围的可观察集合。 因此,当主视图模型初始化时,我可以用半径填充它,在XAML视图中,我可以有一个ValueConverter,它可以简单地将当前项的首选项中的距离单位组合转换为“1英里”、“3公里”等

但是,用户可以随时同时打开控制首选项的UI。如果能够在用户更改首选项的同时刷新此组合框,那就太好了

所以我在寻找一种方法来创建一个依赖的可观测对象。在KnockoutJs中,我只需要创建一个计算的observable,它基本上同时监视ObservableCollection和用户偏好选择


用C#做这件事最好的方法是什么

我想你想要的界面我完全同意这里的@JMK。由于您已经在使用MVVM,您应该能够订阅所选设备的
PropertyChanged
-事件。当值更改时,只需为所有受影响的值提高
属性更改
,这将导致GUI更新。好的,在这种情况下,我将创建一个特殊事件“DistanceUnitChanged”在Preferences VM内部,让另一个视图模型侦听该更改,并从该视图模型传播PropertyChanged事件,以便组合框重新绑定,值转换器更改标签。我只是想知道是否还有其他更优雅的方式。我正在为更改的distance unit创建一个特例事件,以避免检查更改了什么属性名称。谢谢你的帮助。