我在我的ViewModel中有一個名爲IsConnected
的布爾屬性,我想將它綁定到我的MainWindow中的TextBlock。而不是讓文本塊讀取true
或false
我需要它說Connected
或Disconnected
。原諒我,因爲我是WPF的新手。如果有人能給我一個開始,我可以從那裏拿走它,但我不知道如何弄清楚我需要什麼。WPF數據綁定和格式化
回答
我一般寧願只是一個屬性添加到視圖模型(我真的不喜歡的值轉換器),但這裏有一個簡單的方法來完成你想使用樣式做什麼:
<TextBlock>
<TextBlock.Style>
<Style TargetType="TextBlock">
<Setter Property="Text" Value="Connected"/>
<Style.Triggers>
<DataTrigger Binding="{Binding IsConnected}" Value="False">
<Setter Property="Text" Value="Disconnected"/>
</DataTrigger>
</Style.Triggers>
</Style>
</TextBlock.Style>
</TextBlock>
編輯
需要注意的是,一旦你習慣使用數據觸發器,可以做出各種修改您的觀點不接觸你的視圖模型。例如:
<StackPanel>
<Image Source="images\connected.png">
<Image.Style>
<Style TargetType="Image">
<Setter Property="Visibility" Value="Collapsed"/>
<Style.Triggers>
<DataTrigger Binding="{Binding IsConnected}" Value="True">
<Setter Property="Visibility" Value="Visible"/>
</DataTrigger>
</Style.Triggers>
</Style>
</Image.Style>
</Image>
<Image Source="images\disconnected.png">
<Image.Style>
<Style TargetType="Image">
<Setter Property="Visibility" Value="Collapsed"/>
<Style.Triggers>
<DataTrigger Binding="{Binding IsConnected}" Value="False">
<Setter Property="Visibility" Value="Visible"/>
</DataTrigger>
</Style.Triggers>
</Style>
</Image.Style>
</Image>
</StackPanel>
最簡單的方法可能是創建一個自定義轉換器,將您的bool值轉換爲字符串。在IValueConverter和/或WPF的任何位置搜索。
public class BoolToConnectedConverter : IValueConverter
{
#region IValueConverter Members
public object Convert(object value, Type targetType, object parameter,
System.Globalization.CultureInfo culture)
{
if((bool)value)
return "Connected";
else
return "Disconnected";
}
public object ConvertBack(object value, Type targetType, object parameter,
System.Globalization.CultureInfo culture)
{
throw new NotSupportedException();
}
#endregion
}
添加的xmlns:
xmlns:converter="clr-namespace:MyProjectNameSpace"
附加資源XAML(可改變任何需要的元素)在XAML
<Window.Resources>
<converter:BoolToConnectedConverter x:Key="connectedConverter" />
</Window.Resources>
:
<TextBlock Text={Binding IsConnected, Converter={StaticResource connectedConverter}" />
請添加更多細節。 – ocodo 2010-11-18 22:24:13
我要做的唯一變化就是從字符串資源文件中檢索文本。這樣你就可以使它成爲一個很好的通用'BoolToString'轉換器,並使用轉換器參數傳遞資源鍵的前綴以使用(前綴+ bool值==完整的密鑰,以便從資源中檢索字符串)。 – slugster 2010-11-18 22:34:48
@slugster,我同意這一點。想了一會兒,但爲了簡單起見,爲了這個樣本而放棄了它。 – ThomasAndersson 2010-11-18 22:37:06
你可以在做到這一點兩種方式
1)寫一個轉換器
2)改變功能的視圖模型,使其返回所需的字符串,而不是一個布爾
最簡單的方法是#2,但如果你真的需要的布爾值在代碼中的其他地方,您可以使用#1(谷歌轉換器和wpf)
看看值轉換器。
http://www.wpftutorial.net/ValueConverters.html
public class BoolToConnectedConverter : IValueConverter
{
public object Convert(object value, Type targetType,
object parameter, CultureInfo culture)
{
var isConnected = (bool)value;
return isConnected ? "Connected" : "Disconnected";
}
public object ConvertBack(object value, Type targetType,
object parameter, CultureInfo culture)
{
throw new NotImplementedException("Not required for read-only values");
}
}
在您的XAML:
<Window.Resources>
<l:BoolToConnectedConverter x:Key="boolToConnectedConverter" />
</Window.Resources>
<Grid>
<Label Content="{Binding IsConnected, Converter={StaticResource boolToConnectedConverter}}" />
</Grid>
使用視圖模型,你寫兩個屬性包裹,並通知在不動產的變化。
因此,無論何時更改值,字符串表示都會更新並綁定到控件,而您仍然可以在代碼中使用bool屬性。
public string IsConnectedStr{
get{
return IsConnected?"Connected":"Disconnected";
}
}
public bool IsConnected{
get{
return _isConnected;
}
set{
_isConnected=value;
PropertyChanged("IsConnected");
PropertyChanged("IsConnectedStr");
}
}
- 1. WPF使用數據綁定顯示格式化多行文本
- 2. WPF綁定 - 的StringFormat - 未格式化
- 3. 數據綁定WPF和vb
- 4. WPF DependencyProperty和數據綁定
- 5. WPF圖像格式和綁定
- 6. WPF數據綁定
- 7. WPF數據綁定
- 8. 綁定多功能WPF數據網格
- 9. ContextMenu不綁定數據網格WPF
- 10. WPF數據網格動態綁定列
- 11. 如何在WPF中格式化字符串並綁定格式參數?
- 12. WPF:實現和綁定(數據網格)到自定義集合
- 13. 問題樣式數據綁定WPF ComboBoxItem
- 14. ASP ListView - Eval()格式化的數字,綁定()爲未格式化?
- 15. 使用綁定格式化
- 16. 杭大數據量的數據綁定到WPF數據網格
- 17. DataGrid和格式化數據
- 18. WPF CustomControl命令和數據綁定
- 19. WPF數據綁定 - DataGridComboBoxColumn和ObjectDataProvider
- 20. Loaded事件和數據綁定在WPF
- 21. WPF:數據綁定和按鍵處理
- 22. WPF:數據綁定和組合框
- 23. WPF和數據綁定問題
- 24. 在WPF數據網格中格式化可空數據時間
- 25. 序列化WPF數據模板和{綁定表達式}(來自PowerShell?)
- 26. WPF綁定風格
- 27. WPF數據綁定問題
- 28. WPF數據綁定問題
- 29. WPF ListView數據綁定?
- 30. wpf數據綁定測試
這似乎是解決問題的更好方法。我並不真的認爲轉換器是一個好主意。樣式看起來更合適,我不需要生成一個幫助屬性來生成字符串值。我寧願將我的ViewModel數據保存爲它想要的數據。 – jlafay 2010-11-19 14:07:26
工作很好,並感謝圖像示例,因爲我想在我的視圖中爲另一個屬性做類似的事情。 – jlafay 2010-11-19 14:24:57